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 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
零基础学JavaScript最新动画教程+iso光盘下载
Jan 22 Javascript
juqery 学习之五 文档处理 插入
Feb 11 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 Javascript
Javascript中八种遍历方法的执行速度深度对比
Apr 25 Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 Javascript
Angularjs的启动过程分析
Jul 18 Javascript
el-select 下拉框多选实现全选的实现
Aug 02 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 Javascript
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脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
python打开音乐文件的实例方法
2020/07/21 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
收款授权委托书
2014/10/02 职场文书
2014年销售员工作总结
2014/12/01 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
工作服管理制度范本
2015/08/06 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书