我尝试使用此代码验证英国日期:
function ukdate(d) {
var p = new Date(d.split('/')[2], d.split('/')[1] -1, d.split('/')[0]);
if(p.toString() !== 'Invalid Date') {
return p;
}
}
所以,如果我尝试 ukdate(' 31/12 / 1981'),它会正确地返回" 1981年12月31日"。但是,如果我尝试 ukdate(' 12/31/1981'),它将返回" 1983年7月12日星期二"。
为什么会这样?我期待第二次测试返回无效日期,因为31不是有效月份。
答案 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)