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 14 Javascript
一个js写的日历(代码部分网摘)
Sep 20 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
Jan 22 Javascript
基于vuejs实现一个todolist项目
Apr 11 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
Jun 19 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 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;mysql(六)
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
js实现窗口全屏示例详解
2019/09/17 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
python用户管理系统
2018/03/13 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Pycharm安装python库的方法
2020/11/24 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
MYSQL基础面试题
2012/05/13 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
教师产假请假条
2014/04/10 职场文书
教师见习报告范文
2014/11/03 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL