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 相关文章推荐
直接生成打开窗口代码,不必下载
May 14 Javascript
javascript URL锚点取值方法
Feb 25 Javascript
解决jquery插件冲突的问题
Jan 23 Javascript
js强制把网址设为默认首页
Sep 29 Javascript
图解js图片轮播效果
Dec 20 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
EasyUI学习之Combobox级联下拉列表(2)
Dec 29 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
angular-tree-component的使用详解
Jul 30 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
详解vue项目打包步骤
Mar 29 Javascript
浅谈Javascript中的对象和继承
Apr 19 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
python实现自主查询实时天气
2018/06/22 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
最新pycharm安装教程
2020/11/18 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
员工培训心得体会
2013/12/30 职场文书
合伙协议书
2014/04/23 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
党员十八大心得体会
2014/09/12 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
校运会加油稿大全
2015/07/22 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python