JavaScript日期时间与时间戳的转换函数分享


Posted in Javascript onJanuary 31, 2015

如果只是将当前时间转成时间戳,可以直接使用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'));
Javascript 相关文章推荐
使用javascript实现页面定时跳转总结篇
Sep 21 Javascript
angularJS 中input示例分享
Feb 09 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
webpack公共组件引用路径简化小技巧
Jun 15 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 Javascript
小程序实现订单倒计时功能
Apr 23 Javascript
vue-router源码之history类的浅析
May 21 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
关于Vue Router的10条高级技巧总结
May 06 Vue.js
JavaScript监听和禁用浏览器回车事件实例
Jan 31 #Javascript
JavaScript编程中容易出BUG的几点小知识
Jan 31 #Javascript
JavaScript实现的双向跨域插件分享
Jan 31 #Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 #Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
Dec 24 #Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 #Javascript
jQuery知识点整理
Jan 30 #Javascript
You might like
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
php微信支付接口开发程序
2016/08/02 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
python+Django+apache的配置方法详解
2016/06/01 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
详解Python字符串切片
2019/05/20 Python
python做反被爬保护的方法
2019/07/01 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
家长评语和期望
2014/02/10 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android