zoukankan      html  css  js  c++  java
  • js 简单有效判断日期有效性(含闰年)

    原文:https://zhidao.baidu.com/question/1701946584925153620.html

      

    要想精确验证,最容易想到的方法就是通过月份判断日期是否合法(1~28/29/30/31),你可以用一个数组表示每月的天数,如daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31],但你会发现daysInMonth[1]这个值可能是28或29,你又要写一个判断闰年的函数来解决这个问题......

    这至少要花费20行以上的代码来完成这件事,而通过javascript中的Date对象,我们只需要1行代码即可完成上述功能。

    function check(date){
        return (new Date(date).getDate()==date.substring(date.length-2));
    }

    date为一个待检查的类日期字符串(如2013-01-01、2013/01/01、2013/01/32、2013/02/29),不论这个字符串是否正确

    通过新建的Date对象(new Date(date)),可以识别出该日期是否正确,如果不正确则返回Invalid Date

    但这样会有一个bug,当日期的值在1-31之间,new Date总返回一个新的对象,不论该月份是否存在这个日期(如2013-02-30将返回日期对象Sat Mar 02 2013 08:00:00 GMT+0800 (中国标准时间)),返回结果是下个月的日期而不报错

    所以要用getDate()方法获取日期(new Date('2013-02-30')对象的getDate()方法将返回2)

    date.substring(date.length-2)会获取到字符串最后两位也就是日期的部分,这与Date对象的日期部分做比较,如果相等则说明日期有效,否则为无效日期

    如果日期无效则'=='左边值为NaN,右边无论是什么(''、null、undefined、NaN等)结果都为false

    let date1 = '2020-15-09';
    new Date(date1).getDate(); // NaN
    date1.substring(date1.length-2); // "09"
    NaN 不等于 09
    
    let date1 = '2020-02-50';
    new Date(date1).getDate(); // NaN
    date1.substring(date1.length-2); // "50"
    NaN 不等于 50
    
    let date1 = '2020-02-14';
    new Date(date1).getDate(); // 14
    date1.substring(date1.length-2); // "14"
    14 等于 "14"
    
    由此, 可以判断 '2020-15-09' '2020-02-50' 都不是有效的日期
  • 相关阅读:
    docker 入门(docker 镜像 、容器、仓库)
    windows 安装 docker
    关于go mod 的使用和goland 配置 go mod
    mac 安装docker
    vm 将宿主机文件夹 映射至 虚拟机
    centos 关于yum无法使用
    mac 安装 swoole 可能会出现的错误
    BZOJ3378:[USACO]MooFest 狂欢节(树状数组)
    BZOJ3110:[ZJOI2013]K大数查询(整体二分)
    BZOJ4170:极光(CDQ分治)
  • 原文地址:https://www.cnblogs.com/jcz1206/p/10405170.html
Copyright © 2011-2022 走看看