zoukankan      html  css  js  c++  java
  • 正则表达式格式化日期

    通常,从服务器(如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自身的方法就行了。这里就不多说了。

  • 相关阅读:
    在vim中不能用鼠标右键粘贴和跨系统复制粘贴的解决办法
    2、cat
    OTG相关知识
    vim报错E325(出现.swp文件)地解决方法
    Linux命令1
    数组与集合
    if switch for while
    各类运算符
    java基础概念
    基于对话框的程序隐藏于托盘(二)
  • 原文地址:https://www.cnblogs.com/oneivan/p/3671992.html
Copyright © 2011-2022 走看看