验证英国格式的日期

时间:2014-08-04 15:15:21

标签: javascript

我尝试使用此代码验证英国日期:

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'),它会正确地返回" 1981年12月31日"。但是,如果我尝试 ukdate(' 12/31/1981'),它将返回" 1983年7月12日星期二"。

为什么会这样?我期待第二次测试返回无效日期,因为31不是有效月份。

2 个答案:

答案 0 :(得分:1)

JavaScript正在为您转换日期。

在简单的示例中,您可以通过询问下个月的第0天来获取给定月份的最后一天。同样,“8月32日”将更正到9月1日。

月份的工作方式相似。给定年份的第13个月是下一个月的第1个月。一年中的第0个月是之前的12月。

31 % 12 = 7,因此是七月,floor(31/12) = 2因此,这一年向前移动了两年。

这是JavaScript的预期行为。

我可以感谢您<input type="date" />吗?它使用在用户计算机上定义的任何格式(即,它是“区域设置感知”),这已经非常适合用户体验。最重要的是,支持浏览器将呈现日历日期选择器,在手机上也特别有用。在内部,日期采用“标准”YYYY-mm-dd格式。

答案 1 :(得分:1)

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

请参阅the spec

  

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