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 相关文章推荐
javascript 获取图片颜色
Apr 05 Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 Javascript
js闭包实例汇总
Nov 09 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
Feb 23 Javascript
javascript带回调函数的异步脚本载入方法实例分析
Jul 02 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
Three.js基础学习教程
Nov 16 Javascript
学习Vue组件实例
Apr 28 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
详解ES7 Decorator 入门解析
Feb 18 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
vue的滚动条插件实现代码
Sep 07 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Python短信轰炸的代码
2020/03/25 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
使用python实现学生信息管理系统
2021/02/25 Python
最新教师自我评价分享
2013/11/12 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
《识字五》教学反思
2014/03/01 职场文书
师德演讲稿范文
2014/05/06 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS