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 核心函数以及jQuery对象
Mar 23 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
Apr 27 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
使用Curl命令查看请求响应时间方法
Nov 04 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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
wordpress之wp-settings.php
2007/08/17 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
PHP反射基础知识回顾
2020/09/10 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
python基础 range的用法解析
2019/08/23 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
python opencv肤色检测的实现示例
2020/12/21 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
美术毕业生求职信
2014/02/25 职场文书
学徒工职责
2014/03/06 职场文书
干部考核评语
2014/04/29 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
大学感恩节活动总结
2015/05/05 职场文书
郭明义观后感
2015/06/08 职场文书
2016党员入党决心书
2015/09/22 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript