zoukankan      html  css  js  c++  java
  • js实现时间日期的格式化

    前几天参加cvte的笔试,碰到了这样一道题目:

    //请写一个时间日期格式化的函数,具体要求如下:
    
    function format(date,"yyyy-mm-dd HH-mm-ss")  输出: 2016-09-06 15-28-21 
    
    function format(date,"yy/mm/dd HH:mm:ss")  输出: 16/09/06/ 15:28:21
    
    function format(date,"yyyy/mm/dd HH/mm/ss")  输出: 2016/09/06/ 15/28/21

    然后下面是我当时写的答案:

    function format(date,str){
        var mat={};
        mat.M=date.getMonth()+1;//月份记得加1
        mat.H=date.getHours();
        mat.s=date.getSeconds();
        mat.m=date.getMinutes();
        mat.Y=date.getFullYear();
        mat.D=date.getDate();
        mat.d=date.getDay();//星期几
        mat.d=check(mat.d);
        mat.H=check(mat.H);
        mat.M=check(mat.M);
        mat.D=check(mat.D);
        mat.s=check(mat.s);
        mat.m=check(mat.m);
        console.log(typeof mat.D)
        if(str.indexOf(":")>-1){
         mat.Y=mat.Y.toString().substr(2,2);
        
    return mat.Y+"/"+mat.M+"/"+mat.D+" "+mat.H+":"+mat.m+":"+mat.s; } if(str.indexOf("/")>-1){ return mat.Y+"/"+mat.M+"/"+mat.D+" "+mat.H+"/"+mat.m+"/"+mat.s; } if(str.indexOf("-")>-1){ return mat.Y+"-"+mat.M+"-"+mat.D+" "+mat.H+"-"+mat.m+"-"+mat.s; } } //检查是不是两位数字,不足补全 function check(str){ str=str.toString(); if(str.length<2){ str='0'+ str; } return str; }

    上面答案我是后来写的,测试过了,没有错误。但是原来我写的答案存在以下几个错误:

    1、获取的日期时间都是数字,不能直接用字符串的方法,需要调用toString先;

    2、是indexOf,中间的O要大写。

    如果只是这样,其实我还可以接受啦,毕竟笔试的时候没有调试,只有你手写。

    但是,当我网上看到别人的代码之后,我就不淡定了,高手就是不一样,人家直接正则,搞定,哪像我还得一个一个if来判断,效率低下,如果别人的样式不是上面的几种,就会出现一些问题。学习别人的方法的同时,顺便复习下正则。

    以下内容转自zhangpengshou的博客

    方法一:

    // 对Date的扩展,将 Date 转化为指定格式的String
    // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
    // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
    // 例子: 
    // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
    // (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
    Date.prototype.Format = function (fmt) { //author: meizz 
        var o = {
            "M+": this.getMonth() + 1, //月份 
            "d+": this.getDate(), //
            "h+": this.getHours(), //小时 
            "m+": this.getMinutes(), //
            "s+": this.getSeconds(), //
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
            "S": this.getMilliseconds() //毫秒 
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) 
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
        
    }
    
    //调用: 
    var time1 = new Date().Format("yyyy-MM-dd");
    var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");

    方法二:

    <script language="javascript" type="text/javascript"> 
    <!-- /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)
        可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new
        Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423      
     * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04      
     * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04      
     * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04      
     * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18      
     */        
    Date.prototype.pattern=function(fmt) {         
        var o = {         
        "M+" : this.getMonth()+1, //月份         
        "d+" : this.getDate(), //
        "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时         
        "H+" : this.getHours(), //小时         
        "m+" : this.getMinutes(), //
        "s+" : this.getSeconds(), //
        "q+" : Math.floor((this.getMonth()+3)/3), //季度         
        "S" : this.getMilliseconds() //毫秒         
        };         
        var week = {         
        "0" : "/u65e5",         
        "1" : "/u4e00",         
        "2" : "/u4e8c",         
        "3" : "/u4e09",         
        "4" : "/u56db",         
        "5" : "/u4e94",         
        "6" : "/u516d"        
        };         
        if(/(y+)/.test(fmt)){         
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));         
        }         
        if(/(E+)/.test(fmt)){         
            fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);         
        }         
        for(var k in o){         
            if(new RegExp("("+ k +")").test(fmt)){         
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));         
            }         
        }         
        return fmt;         
    }       
         
    var date = new Date();      
    window.alert(date.pattern("yyyy-MM-dd hh:mm:ss"));
    // -->
    </script>

    方法三:

    Date.prototype.format = function (mask) { 
        var d = this;
    
        var zeroize = function (value, length) {
    
                if (!length) length = 2;
    
                value = String(value);
    
                for (var i = 0, zeros = ''; i < (length - value.length); i++) {
    
                    zeros += '0';
    
                }
    
                return zeros + value;
    
            };
    
        return mask.replace(/"[^"]*"|'[^']*'|/b ( ? : d {
            1, 4
        } | m {
            1, 4
        } | yy( ? : yy) ? | ([hHMstT]) / 1 ? | [lLZ]) / b / g, function ($0) {
    
            switch ($0) {
    
            case 'd':
                return d.getDate();
    
            case 'dd':
                return zeroize(d.getDate());
    
            case 'ddd':
                return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
    
            case 'dddd':
                return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
    
            case 'M':
                return d.getMonth() + 1;
    
            case 'MM':
                return zeroize(d.getMonth() + 1);
    
            case 'MMM':
                return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
    
            case 'MMMM':
                return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
    
            case 'yy':
                return String(d.getFullYear()).substr(2);
    
            case 'yyyy':
                return d.getFullYear();
    
            case 'h':
                return d.getHours() % 12 || 12;
    
            case 'hh':
                return zeroize(d.getHours() % 12 || 12);
    
            case 'H':
                return d.getHours();
    
            case 'HH':
                return zeroize(d.getHours());
    
            case 'm':
                return d.getMinutes();
    
            case 'mm':
                return zeroize(d.getMinutes());
    
            case 's':
                return d.getSeconds();
    
            case 'ss':
                return zeroize(d.getSeconds());
    
            case 'l':
                return zeroize(d.getMilliseconds(), 3);
    
            case 'L':
                var m = d.getMilliseconds();
    
                if (m > 99) m = Math.round(m / 10);
    
                return zeroize(m);
    
            case 'tt':
                return d.getHours() < 12 ? 'am' : 'pm';
    
            case 'TT':
                return d.getHours() < 12 ? 'AM' : 'PM';
    
            case 'Z':
                return d.toUTCString().match(/[A-Z]+$/);
    
                // Return quoted strings with the surrounding quotes removed      
    
            default:
                return $0.substr(1, $0.length - 2);
    
            }
    
        });
    
    };
  • 相关阅读:
    file is universal (3 slices) but does not contain a(n) armv7s slice error for static libraries on iOS
    WebImageButton does not change images after being enabled in Javascript
    ajax OPTION
    编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
    获取海洋天气预报
    C#线程系列教程(1):BeginInvoke和EndInvoke方法
    js控制只能输入数字和小数点
    Response.AddHeader(,)
    ManualResetEvent的理解
    Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 区别
  • 原文地址:https://www.cnblogs.com/huansky/p/5846051.html
Copyright © 2011-2022 走看看