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 闭包在封装函数时的简单分析
Nov 28 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
javascript Slip.js实现整屏滑动的手机网页
Nov 25 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
过期软件破解办法实例详解
Jan 04 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
JQuery扩展对象方法操作示例
Aug 21 jQuery
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
Vue自定义render统一项目组弹框功能
Jun 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
php 正则 过滤html 的超链接
2009/06/02 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Python数组条件过滤filter函数使用示例
2014/07/22 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
python处理大数字的方法
2015/05/27 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python开头的coding设置方法
2019/08/08 Python
pycharm安装及如何导入numpy
2020/04/03 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
python 获取计算机的网卡信息
2021/02/18 Python
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python