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中this关键字使用方法详解
Mar 08 Javascript
js toFixed()方法的重写实现精度的统一
Mar 06 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
基于vue2.0+vuex的日期选择组件功能实现
Mar 13 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 jQuery
详解JS模块导入导出
Dec 20 Javascript
js中DOM事件绑定分析
Mar 18 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
小程序实现横向滑动日历效果
Oct 21 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实现的debug log日志操作类实例
2016/07/12 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
详解Python中dict与set的使用
2015/08/10 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python流程控制 while循环实现解析
2019/09/02 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
如何写python的配置文件
2020/06/07 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
2014年教师培训的自我评价
2014/01/03 职场文书
《猫》教学反思
2014/02/26 职场文书
ktv筹备计划书
2014/05/03 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL