验证英国格式的日期

Validate Uk formatted date

本文关键字:日期 格式 英国 验证      更新时间:2023-09-26

我正在尝试使用以下代码验证英国日期:

function ukdate(d) {
    var p = new Date(d.split('/')[2], d.split('/')[1] -1, d.split('/')[0]);
    if(p.toString() !== 'Invalid Date') {
         return p;
    }
}
http://jsfiddle.net/GE3xU/1/

所以如果我尝试ukdate('31/12/1981')它会正确返回"The Dec 31 1981"。但是,如果我尝试ukdate('12/31/1981')它返回"Tue Jul 12 1983"。

为什么会发生这种情况?我希望第二个测试返回无效日期,因为31不是一个有效的月份。

JavaScript正在为您转换日期。

在简单的例子中,您可以通过询问下一个月的第0天来获得给定月份的最后一天。同样,将"32 of August"更正为9月1日。

月份的工作原理类似。某一年的第13个月就是下一年的第1个月。一年的第0个月是前一年的12月。

31 % 12 = 7表示七月,floor(31/12) = 2表示年份向前移动两位。

这是JavaScript的预期行为。

我可以让你对<input type="date" />感兴趣吗?它使用用户计算机上定义的任何格式(即。它是"区域感知"的),这对于用户体验来说已经很好了。最重要的是,支持浏览器将呈现一个日历日期选择器,这在手机上也特别有用。在内部,日期是"标准"的YYYY-mm-dd格式。

将月值除以12并与年份相加,然后将余数用作实际月值。

参见规范

设ym为y + floor(m/12)。
设mn为m模12