一般,從服務器(如C#代碼)獲得的一個日期對象的格式可能爲 :javascript
2014-04-04T13:04:46.187
在展顯給用戶時,可能只須要顯示日期部分,如:java
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})?/
若是輸入前面的日期格式,獲得的效果以下,也許有人會奇怪,爲何把日期分組那麼多個呢?後面有用到的:) spa
最後附上完整的代碼:code
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 ""; }
調用:orm
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自身的方法就好了。這裏就很少說了。對象