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 27 Javascript
js string 转 int 注意的问题小结
Aug 15 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
javascript中DOM复选框选择用法实例
May 14 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
Aug 05 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
Mac下安装vue
Apr 11 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
Sep 22 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计数器的实现代码
2013/06/08 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
医院信息公开实施方案
2014/05/09 职场文书
答谢会策划方案
2014/05/12 职场文书
文明生主要事迹
2014/05/25 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
功夫熊猫观后感
2015/06/10 职场文书
公司周年庆寄语
2019/06/21 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers