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 相关文章推荐
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
根据json字符串生成Html的一种方式
Jan 09 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
Nov 28 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 Javascript
原生js实现商品筛选功能
Oct 28 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 引用(&amp;)详解
2009/11/20 PHP
php从字符串创建函数的方法
2015/03/16 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
Javascript中的数学函数
2007/04/04 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
axios基本入门用法教程
2017/03/25 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
Python中__new__与__init__方法的区别详解
2015/05/04 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
详解python中的数据类型和控制流
2019/08/08 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
啤酒销售实习自我鉴定
2013/09/24 职场文书
日语翻译个人求职的自我评价
2013/10/14 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
求职个人评价范文
2014/04/09 职场文书
小学教师师德整改措施
2014/09/29 职场文书
起诉意见书范文
2015/05/19 职场文书
Python 语言实现六大查找算法
2021/06/30 Python