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的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
May 24 Javascript
jQuery使用数组编写图片无缝向左滚动
Dec 11 Javascript
js模仿jquery的写法示例代码
Jun 16 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
详解jquery中$.ajax方法提交表单
Nov 03 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
js放大镜放大购物图片效果
Jan 18 Javascript
Javascript创建类和对象详解
May 31 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
如何手写一个简易的 Vuex
Oct 10 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 csv操作类代码
2009/12/14 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
详解Bootstrap插件
2016/04/25 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
python进行两个表格对比的方法
2018/06/27 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
pandas 将索引值相加的方法
2018/11/15 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
杭州-DOTNET笔试题集
2013/09/25 面试题
Java面向对象面试题
2016/12/26 面试题
社区活动邀请函范文
2014/01/29 职场文书
财产保全担保书
2015/01/20 职场文书
2016党校培训心得体会
2016/01/07 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS