正则表达式格式化日期

一般,从服务器(如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自身的方法就好了。这里就很少说了。对象

相关文章
相关标签/搜索