JS版的date函数(和PHP的date函数一样)


Posted in Javascript onMay 12, 2014
// 和PHP一样的时间戳格式化函数
// @param  {string} format    格式
// @param  {int}    timestamp 要格式化的时间 默认为当前时间
// @return {string}           格式化的时间字符串
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(){
                t = f.l(); return t.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(){
                t = f.F(); return t.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;
    });
}
Javascript 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
使图片旋转的3种解决方案
Nov 21 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
js返回顶部实例分享
Dec 21 Javascript
vue cli 全面解析
Feb 28 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
微信小程序使用canvas的画图操作示例
Jan 18 Javascript
你或许不知道的一些npm实用技巧
Jul 04 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 Javascript
Vue js with语句原理及用法解析
Sep 03 Javascript
七个很有意思的PHP函数
May 12 #Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 #Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 #Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 #Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 #Javascript
JavaScript中对象属性的添加和删除示例
May 12 #Javascript
构造函数+原型模式构造js自定义对象(最通用)
May 12 #Javascript
You might like
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
PHP中Array相关函数简介
2016/07/03 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
brook javascript框架介绍
2011/10/10 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
python比较两个列表大小的方法
2015/07/11 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
python面向对象 反射原理解析
2019/08/12 Python
如何用python免费看美剧
2020/08/11 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
采购部部门职责
2013/12/15 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL