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 相关文章推荐
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
JQuery解析HTML、JSON和XML实例详解
Mar 29 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
React从react-router路由上做登陆验证控制的方法
May 10 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
javascript实现留言板功能
Feb 08 Javascript
jQuery实现鼠标滑动切换图片
May 27 jQuery
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 Javascript
JavaScript实现商品评价五星好评
Nov 30 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/07 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
python从入门到精通(DAY 1)
2015/12/20 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python3实现二叉树的最大深度
2019/09/30 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
服务标语大全
2014/06/18 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
《假如》教学反思
2016/02/17 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python