JavaScript日期时间与时间戳的转换

jopen 6年前

如果只是将当前时间转成时间戳,可以直接使用new Date().getTime()/1000;但如果是将某个具体时间或日期转成Unix时间戳,ie不支持像new Date(“2013-1-1”)  这样带参数的方法,将返回NaN

对此,我写了以下函数,支持ie6+,谷歌,火狐等浏览器:

    function getTime(day){            re = /(\d{4})(?:-(\d{1,2})(?:-(\d{1,2}))?)?(?:\s+(\d{1,2}):(\d{1,2}):(\d{1,2}))?/.exec(day);            return new Date(re[1],(re[2]||1)-1,re[3]||1,re[4]||0,re[5]||0,re[6]||0).getTime()/1000;        }                //test        alert(getTime("2013-02-03 10:10:10"));        alert(getTime("2013-02-03"));        alert(getTime("2013-02"));        alert(getTime("2013"));  
下面这个将时间戳转换成日期格式的函数,支持自定义的日期格式,效果类似PHP的date函数,同样支持ie6+,谷歌,火狐等浏览器。这个函数是网友实现的,以后有时间我也写一个出来 ^_^
    function date(format, timestamp){             var a, jsdate=((timestamp) ? new Date(timestamp*1000) : new Date());            var pad = function(n, c){                if((n = n + "").length < c){                    return new Array(++c - n.length).join("0") + n;                } else {                    return n;                }            };            var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];            var txt_ordin = {1:"st", 2:"nd", 3:"rd", 21:"st", 22:"nd", 23:"rd", 31:"st"};            var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];             var f = {                // Day                d: function(){return pad(f.j(), 2)},                D: function(){return f.l().substr(0,3)},                j: function(){return jsdate.getDate()},                l: function(){return txt_weekdays[f.w()]},                N: function(){return f.w() + 1},                S: function(){return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'},                w: function(){return jsdate.getDay()},                z: function(){return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0},                              // Week                W: function(){                    var a = f.z(), b = 364 + f.L() - a;                    var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;                    if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){                        return 1;                    } else{                        if(a <= 2 && nd >= 4 && a >= (6 - nd)){                            nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");                            return date("W", Math.round(nd2.getTime()/1000));                        } else{                            return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);                        }                    }                },                              // Month                F: function(){return txt_months[f.n()]},                m: function(){return pad(f.n(), 2)},                M: function(){return f.F().substr(0,3)},                n: function(){return jsdate.getMonth() + 1},                t: function(){                    var n;                    if( (n = jsdate.getMonth() + 1) == 2 ){                        return 28 + f.L();                    } else{                        if( n & 1 && n < 8 || !(n & 1) && n > 7 ){                            return 31;                        } else{                            return 30;                        }                    }                },                              // Year                L: function(){var y = f.Y();return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0},                //o not supported yet                Y: function(){return jsdate.getFullYear()},                y: function(){return (jsdate.getFullYear() + "").slice(2)},                              // Time                a: function(){return jsdate.getHours() > 11 ? "pm" : "am"},                A: function(){return f.a().toUpperCase()},                B: function(){                    // peter paul koch:                    var off = (jsdate.getTimezoneOffset() + 60)*60;                    var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;                    var beat = Math.floor(theSeconds/86.4);                    if (beat > 1000) beat -= 1000;                    if (beat < 0) beat += 1000;                    if ((String(beat)).length == 1) beat = "00"+beat;                    if ((String(beat)).length == 2) beat = "0"+beat;                    return beat;                },                g: function(){return jsdate.getHours() % 12 || 12},                G: function(){return jsdate.getHours()},                h: function(){return pad(f.g(), 2)},                H: function(){return pad(jsdate.getHours(), 2)},                i: function(){return pad(jsdate.getMinutes(), 2)},                s: function(){return pad(jsdate.getSeconds(), 2)},                //u not supported yet                              // Timezone                //e not supported yet                //I not supported yet                O: function(){                    var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);                    if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;                    return t;                },                P: function(){var O = f.O();return (O.substr(0, 3) + ":" + O.substr(3, 2))},                //T not supported yet                //Z not supported yet                              // Full Date/Time                c: function(){return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()},                //r not supported yet                U: function(){return Math.round(jsdate.getTime()/1000)}            };                          return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){                if( t!=s ){                    // escaped                    ret = s;                } else if( f[s] ){                    // a date function exists                    ret = f[s]();                } else{                    // nothing special                    ret = s;                }                return ret;            });        }                //test        alert(date('Y-m-d H:i:s',(new Date).getTime()/1000));        alert(date('Y-m-d',(new Date).getTime()/1000));        alert(date('Y-m-d H:i:s','1355252653'));  
来自:http://blog.csdn.net/mycwq/article/details/12653117