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 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
jQuery 页面载入进度条实现代码
Feb 08 Javascript
js滚动条回到顶部的代码
Dec 06 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
JQuery触发事件例如click
Sep 11 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
基于javascript bootstrap实现生日日期联动选择
Apr 07 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
详解require.js配置路径的用法和css的引入
Sep 06 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
jQuery zTree插件快速实现目录树
Aug 16 jQuery
七个很有意思的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脚本代码
2011/02/19 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
axios学习教程全攻略
2017/03/26 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python实现二叉查找树实例代码
2018/02/08 Python
python实现多线程网页下载器
2018/04/15 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
解决python运行效率不高的问题
2020/07/20 Python
Python中pass的作用与使用教程
2020/11/13 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
C语言面试题
2015/10/30 面试题
创建精神文明单位实施方案
2014/03/08 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
公司门卫岗位职责
2015/04/13 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
JavaScript实例 ODO List分析
2022/01/22 Javascript
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL