我得到的价值
.getTime()
在IE11中是
183289406400000
.
日期本身返回为
March 18, 7778
.
13/77/7777
在里面
mm/dd/yyyy
格式化并得出“7777年的第13个月和第77天”的结果,该结果(令人沮丧但并不意外)适用于
7778年3月18日
(如果您将13个月77天添加到
January 1, 7777
).
考虑到google的快速搜索没有发现
Date
有一点要注意的是,虽然它可能没有它可能的效率(或准确度)那么高,但它应该作为一个合理的例子来帮助你开始。像这样的事情应该可以:
function isValidDateString(s) {
"use strict";
if (typeof s !== "string") {
return false; // not a string, exit.
}
var parts = s.split("/");
if (parts.length !== 3) {
return false; // unexpected number of slashes. exit.
}
var d31 = [1, 3, 5, 7, 8, 10, 12];
var d30 = [4, 6, 9, 11];
var mm = parseInt(parts[0]);
var dd = parseInt(parts[1]);
var yyyy = parseInt(parts[2]);
// empirical testing in Chrome & IE11 to get this value. YMMV.
var maxYear = 275760;
var isValidYear = !isNaN(yyyy) && yyyy <= maxYear;
var isDivisbleBy4 = (yyyy % 4 === 0);
var isDivisbleBy100 = (yyyy % 100 === 0);
var isDivisbleBy400 = (yyyy % 400 === 0);
var isLeapYear = (isDivisbleBy4 && !isDivisbleBy100) || isDivisbleBy400;
var isValidMonth = !isNaN(mm) && (mm >= 1 && mm <= 12);
if (!isValidMonth) {
return false;
}
var maxDaysInMonth = 28;
if (d31.indexOf(mm) > -1) {
maxDaysInMonth = 31;
} else if (d30.indexOf(mm) > -1) {
maxDaysInMonth = 30;
} else if (isLeapYear) {
maxDaysInMonth = 29;
}
var isValidDay = !isNaN(dd) && (dd > 0 && dd <= maxDaysInMonth);
if (!isValidDay) {
return false;
}
return isValidMonth && isValidDay && isValidYear;
}
var testsThatShouldFail = [
'13/77/7777', // lousy Smarch weather!
'2/29/2018',
'9/12/275761',
'4/31/2016',
'6/35/2019',
];
var testsThatShouldPass = [
'1/1/1900',
'2/29/2000',
'2/29/2016',
'9/12/275760',
'8/16/2018',
];
console.log('should fail', testsThatShouldFail.map(isValidDateString));
console.log('should pass', testsThatShouldPass.map(isValidDateString));