狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

javascript格式化日期

admin
2012年3月27日 14:9 本文熱度 2896

   對日期型數據進行格式化是我們經常遇到的一個問題,但是javascript中并沒有提供對日期進行格式化的函數,所以在網上就出現了很多版本的格式化函數,寫法不盡相同,但基本都可以達到所需的目標。我這里也寫出了一個類似功能的函數,一來鞏固一下所學的javascript知識,也可以給大家提供一個參考。
    下面是這個函數的主體實現部分:



Js代碼


  1. /**

  2.  * 對日期進行格式化,  

  3.  * @param date 要格式化的日期  

  4.  * @param pattern 進行格式化的模式  

  5.  *     支持的模式字母有:  

  6.  *     y:年,  

  7.  *     M:年中的月份(1-12),  

  8.  *     d:月份中的天(1-31),  

  9.  *     H:小時(0-23),  

  10.  *     h:小時(0-12),  

  11.  *     m:分(0-59),  

  12.  *     s:秒(0-59),  

  13.  *     S:毫秒(0-999),  

  14.  *     E:星期(以漢語表示),  

  15.  *     e:星期(以英文表示),  

  16.  *     A:上午/下午標識,  

  17.  *     a:AM/PM標識  

  18.  * @return  

  19.  */  

  20. function formatDate(date,pattern){   

  21.     var d;   

  22.     if((d=parseDate(date))==null){   

  23.         return "";   

  24.     }   

  25.     if(!pattern){   

  26.         pattern = "yyyy-MM-dd";   

  27.     }   

  28.     var arrWeek = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六","Sunday","Monday","Tuesday","Tuesday","Thursday","Friday","Saturday"];   

  29.     var value = new Object();   

  30.     value["y"] = parseString(date.getFullYear());   

  31.     value["M"] = parseString(date.getMonth() + 1);   

  32.     value["d"] = parseString(date.getDate());   

  33.     value["H"] = parseString(date.getHours());   

  34.     value["h"] = parseString(value["H"] > 12 ? (value["H"]-12) : value["H"]);   

  35.     value["m"] = parseString(date.getMinutes());   

  36.     value["s"] = parseString(date.getSeconds());   

  37.     value["S"] = parseString(date.getMilliseconds());   

  38.     value["E"] = arrWeek[date.getDay()];   

  39.     value["e"] = arrWeek[date.getDay() + 7];   

  40.     value["a"] = (value["H"] > 12 ? "PM" : "AM");   

  41.     value["A"] = (value["H"] > 12 ? "下午" : "上午");   

  42.     var result = "";   

  43.     var i = 0;   

  44.     var hasE = false;//是否出現過星期   

  45.     var hasAMPM = false;//是否出現過上午下午   

  46.     while(i < pattern.length){   

  47.         var c = pattern.charAt(i++);   

  48.         var lc = c;//記錄本次要處理的字母,如'y'   

  49.         var tmpStr = c;//本次在處理的字母格式,如'yyyy'   

  50.         while(i < pattern.length && (c=pattern.charAt(i))==lc){   

  51.             tmpStr += c;   

  52.             i++;   

  53.         }   

  54.         if(value[lc]!=""&&value[lc]!=null&&value[lc]!="undefined"){   

  55.             //本次要處理的字母是模式母   

  56.             if((lc == "E" || lc == "e") && !hasE){   

  57.                 //星期   

  58.                 result += value[lc];   

  59.                 hasE = true;   

  60.             } else if(lc == "E" || lc == "e") {   

  61.                 result += tmpStr;   

  62.             } else if((lc=="a" || lc == "A")  && !hasAMPM){   

  63.                 //上下午   

  64.                 result += value[lc];   

  65.                 hasAMPM = true;   

  66.             } else if((lc=="a" || lc == "A") ){   

  67.                 result += tmpStr;   

  68.             } else {   

  69.                 //如果是 單個的日期,月份,小時,分,秒的字符串,不能再進行字符串的截取操作   

  70.                 if(tmpStr == "d" || tmpStr == "M" || tmpStr=="H" || tmpStr=="h" || tmpStr == "m" || tmpStr == "s"){   

  71.                     result += value[lc];   

  72.                 } else {   

  73.                     result += value[lc].fillChar(tmpStr.length);   

  74.                 }   

  75.             }   

  76.         } else {//非模式字母,直接輸出   

  77.             result += tmpStr;   

  78.         }   

  79.     }   

  80.     return result;   

  81. }  

    先來看一下它能給我們帶來什么樣的效果吧,測試的代碼如下:



Js代碼


  1. var date = new Date();

  2. document.write(formatDate(date,"yyyy-MM-dd HH:mm:ss.SSS E") + "<br>");   

  3. document.write(formatDate(date,"yyyy年MM月dd日 HH時mm分ss秒 E") + "<br>");   

  4. document.write(formatDate(date,"yyyy-M-d hh:mm:ss.SSS A E") + "<br>");   

  5. document.write(formatDate(date,"MM/dd/yy hh:mm:ss a e") + "<br>");   

  6. document.write(formatDate(date,"M/d/yyyy") + "<br>");   

  7. document.write(formatDate(date,"yyyyyy年MMMMMMM月ddddddd日 HH時mm分ss秒 EEEEE") + "<br>");[color=red]最后這個有點變態了,看它會出現什么結果[/color]   

  8. ??為什么這里不能顯示為紅色呢  

測試輸出為:



Js代碼


  1. 2010-10-07 17:08:34.187 星期四   

  2. 2010年10月07日 17時08分34秒 星期四   

  3. 2010-10-7 05:08:34.187 下午 星期四   

  4. 10/07/10 05:08:34 PM Thursday   

  5. 10/7/2010   

  6. 002010年0000010月0000007日 17時23分41秒 星期四  

    完成上面的測試之后,發現這個函數已經可以較好地為我們提供所需的功能了。這里所采用的模式字母主要參照java中的模式字母,但是只實現其中一部分的模式字母功能。函數中的代碼已經盡可能地增加了注釋,為以后的再修改及大家的參考提供方便。
     在上面的函數中,用到了幾個功能函數,下面是它們的代碼清單。其中,前兩個函數比較簡單,相信很多人也都對這種功能不莫生;后面的fillChar函數類似于oracle中的lpad與rpad函數,但也可以進行字符串的截取操作。上面的對年份進行截取采用的就是fillChar函數;測試中的那個比較變態的格式串采用的就是它的lpad與rpad的功能。



Js代碼


  1. function parseDate(value) {   

  2.     var date = null;   

  3.     if (Date.prototype.isPrototypeOf(value)) {   

  4.         date = value;   

  5.     } else if (typeof (value) == "string") {   

  6.         date = new Date(value.replace(/-/g, "/"));   

  7.     } else if (value != null && value.getTime) {   

  8.         date = new Date(value.getTime());   

  9.     }   

  10.     ;   

  11.     return date;   

  12. };   

  13.   

  14. /**  

  15.  * 將對象轉換為字符串類型  

  16.  */  

  17. function parseString(value) {   

  18.     if (value == null) {   

  19.         return "";   

  20.     } else {   

  21.         return value.toString();   

  22.     }   

  23. };   

  24. String.prototype.fillChar = function(length,mode,char){   

  25.     if(!char){   

  26.         char = "0";   

  27.     }   

  28.     if(this.length>length){//比實際想要的長度更大   

  29.         if(mode=="after"){//如果是要在后面填充,截取的時候會將會后面的部分截取掉   

  30.             return this.substr(0,length);   

  31.         } else {//默認截取前一部分的數據   

  32.             return this.substr(this.length - length,length);   

  33.         }   

  34.     }   

  35.     var appendStr = "";   

  36.     for(var i = 0; i < (length - this.length)/char.length;i++){   

  37.         appendStr += char;   

  38.     }   

  39.     if(mode == "after"){   

  40.         return this + appendStr;   

  41.     }   

  42.     else {   

  43.         return appendStr + this;   

  44.     }   

  45. };  

   功能算是實現了,但是做為javascript的初學者,對這樣的代碼書寫格式及代碼的效率都難以把握。希望高手看到后能對效率優化及代碼優化方面不吝指導。

該文章在 2012/3/27 14:09:18 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved