正則表達式格式化日期


通常,從服務器(如C#代碼)得到的一個日期對象的格式可能為 :

2014-04-04T13:04:46.187

 

在展顯給用戶時,可能只需要顯示日期部分,如:

2014年4月4日

 

不少資料介紹JavaScript的日期格式化,會直接把日期字符串轉換成JavaScript的日期對象,如:

new Date("2014-04-04T13:04:46.187") //有可能提示Invalid Date

new Date("2014年04月04日") //有可能提示Invalid Date

經測試,同樣的字符串,在公司的電腦上轉換時提示Invalid Date,在家里的電腦上又成功。是不是因為跟電腦系統環境有關?有待考究。

 

通常,日期的格式不外乎就那幾種,何嘗不用正則表達式?想到就動手,日期匹配的正則表達式如下(支持中文):

/^([0-9]{4})[-/\.年]([0-1]?[0-9]{1})[-/\.月]([0-3]?[0-9]{1})[日]?.?([0-2]?[0-9](:[0-6][0-9]){2})?/

如果輸入前面的日期格式,得到的效果如下,也許有人會奇怪,為什么把日期分組那么多個呢?后面有用到的:) 

 

最后附上完整的代碼:

 function getDateStr(value, formatStr) {
       formatStr = formatStr|| “yyyy-MM-dd”; //默認格式
            var dateReg = /^([0-9]{4})[-/\.年]([0-1]?[0-9]{1})[-/\.月]([0-3]?[0-9]{1})[日]?.?([0-2]?[0-9](:[0-6][0-9]){2})?/;
            var arr = dateReg.exec(value);
            if (arr && arr[0]) {
                if (formatStr) {
                    var subReg = /y+(.)M+(.)d+(.)?/i;
                    var subArr = subReg.exec(formatStr);
                    if (subArr) {
                        var resStr = arr[1] + subArr[1];
                        resStr += arr[2] + subArr[2];
                        resStr += arr[3] + (subArr[3] || "");
                        return resStr;
                    }
                }
                return arr[0];
            }
            return "";
        }

 

調用:

var a1=  getDateStr("2014-4-17 21:36:01","yyyy年MM月dd日") //2014年4月17日

var a2=  getDateStr("2014-4-17T21:36:01")//默認格式 2014-4-17 

 

注:getDateStr 暫不支持直接傳一個javascript Date對象參數,不過要擴充也容易,在轉換前做一下value的類型判斷然后調用Date里面javascript自身的方法就行了。這里就不多說了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM