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.fn.extend与jquery.extend
Nov 21 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
jquery中键盘事件小结
Feb 24 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
JS实现快递单打印功能【推荐】
Jun 21 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
Sep 19 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 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 __autoload()方法真的影响性能吗?
2012/03/30 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
document.createElement()用法
2013/03/13 Javascript
js快速排序的实现代码
2013/12/08 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
python语音识别实践之百度语音API
2018/08/30 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
网上书店创业计划书
2014/01/12 职场文书
超级搞笑检讨书
2014/01/15 职场文书
教书育人演讲稿
2014/09/11 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
Python实现机器学习算法的分类
2021/06/03 Python
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL