This question already has answers here:
Why does Date.parse give incorrect results?
(11个答案)
2年前关闭。
我需要验证提到的日期是否应大于或等于当前日期。但是这里的问题是,如果用户给的旧日期是'03 / 11/0018',则默认情况下年份将被视为2018(按照下面的代码)。
我做的一种方法是获取输入数据并使用子字符串和handle获取年份(以下代码中未提及)。
还有其他方法可以解决吗?
然后,如果需要,可以使用这些数字来构造
请注意,
另请注意,
这里有很多陷阱,您应该考虑使用带有更清洁日期API的库。
(11个答案)
2年前关闭。
我需要验证提到的日期是否应大于或等于当前日期。但是这里的问题是,如果用户给的旧日期是'03 / 11/0018',则默认情况下年份将被视为2018(按照下面的代码)。
我做的一种方法是获取输入数据并使用子字符串和handle获取年份(以下代码中未提及)。
还有其他方法可以解决吗?
<html>
<head>
<script>
function dateCompare() {
var d1 = new Date('03/11/0018');
var d2 = new Date('03/11/2018'); //consider today's date is 03/11/2018
if(d1 < d2){
//validate the input date
document.write("entered date cannot be earlier to the current date");
}
else{
//validation passed
document.write("Ideally 03/11/0018 is earlier than 03/11/2018 & validation should be failed");
}
}
dateCompare();
</script>
</head>
</html>
最佳答案
MDN strongly discourages使用new Date(string)
或Date.parse(string)
的原因在于实现是与浏览器相关的,并且您已经发现,这通常有点不直观。
您可以自己解析字符串,这样做很好,尤其是在格式正确定义的情况下。
const re = /(\d\d)\/(\d\d)\/(\d\d\d\d)/;
const [whole, day, month, year] = re.exec('03/02/2018');
然后,如果需要,可以使用这些数字来构造
Date
:const d = new Date(year, month - 1, day);
请注意,
Date
构造函数期望零索引月份(即一月是0
)。另请注意,
Date
将年份0 - 99
映射到1900 - 1999
。如果您不想这样做,则需要使用Date.prototype.setFullYear
和Date.prototype.getFullYear
强制执行。是否需要这样做的地方不是很一致:const d = new Date(88, 1, 2);
console.log(d); // 1988-02-02T00:00:00.000Z
d.setFullYear(88);
console.log(d); // 0088-02-02T00:00:00.000Z
console.log(d.getYear()); // -1812
console.log(d.getFullYear()); // 88
这里有很多陷阱,您应该考虑使用带有更清洁日期API的库。
关于javascript - Javascript中的日期比较和验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49219797/