zoukankan      html  css  js  c++  java
  • Javasript中Date日期常用用法(正则、比较)

    Date 对象用于处理日期和时间
    创建 Date 对象的语法:

     代码如下 复制代码
    var myDate=new Date()

    Date 对象会自动把当前日期和时间保存为其初始值。
    参数形式有以下5种: 

     代码如下 复制代码

    new Date("month dd,yyyy hh:mm:ss");
    new Date("month dd,yyyy");
    new Date(yyyy,mth,dd,hh,mm,ss);
    new Date(yyyy,mth,dd);
    new Date(ms);

    注意最后一种形式,参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下:

    month:用英文表示月份名称,从January到December

    mth:用整数表示月份,从(1月)到11(12月)

    dd:表示一个月中的第几天,从1到31

    yyyy:四位数表示的年份

    hh:小时数,从0(午夜)到23(晚11点)

    mm:分钟数,从0到59的整数

    ss:秒数,从0到59的整数

    ms:毫秒数,为大于等于0的整数

    如:

     代码如下 复制代码

    new Date("January 12,2006 22:19:35");

    new Date("January 12,2006");

    new Date(2006,0,12,22,19,35);

    new Date(2006,0,12);

    new Date(1137075575000);

    下面整理了一些日期正则达式


    简单的正则 如 : d{4}-d{2}-d{2}
    但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题…..

    对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。

    UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。

    先考虑与年份无关的前三条规则,年份可统一写作

    (?!0000)[0-9]{4}

    下面仅考虑月和日的正则

    1. 包括平年在内的所有年份的月份都包含1-28日

     代码如下 复制代码

    (0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

    2. 包括平年在内的所有年份除2月外都包含29和30日

     代码如下 复制代码

    (0[13-9]|1[0-2])-(29|30)

    3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日

     代码如下 复制代码

    (0[13578]|1[02])-31)

    合起来就是除闰年的2月29日外的其它所有日期

     代码如下 复制代码

    (?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

    接下来考虑闰年的实现 http://www.111cn.net/wy/js-ajax/55117.htm

    1 : 四年一闰

     代码如下 复制代码
    ([0-9]{2}(0[48]|[2468][048]|[13579][26])

    2 : 百年不闰,四百年再闰

     代码如下 复制代码
    (0[48]|[2468][048]|[13579][26])00

    3 : 合起来就是所有闰年的2月29日

     代码如下 复制代码
    ([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

    四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则

     代码如下 复制代码

    ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

    考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。

     代码如下 复制代码

    ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$


    Date函数比较日期大小,这里就要用于正则表达式

     代码如下 复制代码

    //js 正则验证日期格式,使用Date函数比较日期大小
    var dateOfArrival='2013-04-08';
    var year='2013';
    var month='04';
    var day='07';
     
    /* js 正则验证日期格式 */
    reg=/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
     
    if(!reg.test(dateOfArrival)){
        alert('日期输入有误!');
    }
    else
    {
       
    //Date 比较日期大小
        var today=new Date();
        var arrivalDay=new Date(year,month-1,day);
     
        if(arrivalDay<today)
        {
            alert('到货日期要大于今天的日期!');
        }
     
    }

    最后附一些关于日期date函数返回值函数


    Date() 返回当日的日期和时间。
    getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
    getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
    getMonth() 从 Date 对象返回月份 (0 ~ 11)。
    getFullYear() 从 Date 对象以四位数字返回年份。
    getYear() 请使用 getFullYear() 方法代替。
    getHours() 返回 Date 对象的小时 (0 ~ 23)。
    getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
    getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
    getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
    getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
    getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
    getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
    getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
    getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
    getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
    getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
    getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
    getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
    getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。
    parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
    setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
    setMonth() 设置 Date 对象中月份 (0 ~ 11)。
    setFullYear() 设置 Date 对象中的年份(四位数字)。
    setYear() 请使用 setFullYear() 方法代替。
    setHours() 设置 Date 对象中的小时 (0 ~ 23)。
    setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
    setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
    setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
    setTime() 以毫秒设置 Date 对象。
    setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
    setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
    setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
    setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
    setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
    setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
    setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
    toSource() 返回该对象的源代码。
    toString() 把 Date 对象转换为字符串。
    toTimeString() 把 Date 对象的时间部分转换为字符串。
    toDateString() 把 Date 对象的日期部分转换为字符串。
    toGMTString() 请使用 toUTCString() 方法代替。 1 3
    toUTCString() 根据世界时,把 Date 对象转换为字符串。 
    toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
    toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
    toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
    UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。
    valueOf() 返回 Date 对象的原始值。
    var objDate=new Date([arguments list]);

  • 相关阅读:
    Cannot assign requested address问题总结
    Trying to connect an http1.x server
    从 0 到 1 搭建技术中台之推送平台实践:高吞吐、低延迟、多业务隔离的设计与实现
    思考gRPC :为什么是HTTP/2
    HTTP/1HTTP/2HTTP/3
    get_or_create update_or_create
    死锁案例 GAP 锁 没有就插入,存在就更新
    死锁产生必要条件
    京东零售mockRpc实践
    Certbot CA 证书 https
  • 原文地址:https://www.cnblogs.com/alibai/p/3565934.html
Copyright © 2011-2022 走看看