检查一个值是否为有效日期的简单方法是什么,允许的任何已知日期格式。
例如,我有值10-11-2009
,10/11/2009
,2009-11-10T07:00:00+0000
,它们都应该被识别为日期值,值200
,10
,350
,它们不应该被识别为日期值。如果这是可能的,那么最简单的检查方法是什么?因为时间戳也是允许的。
发布于 2014-09-12 03:31:42
new Date(date) === 'Invalid Date'
只适用于火狐和Chrome浏览器。IE8 (我的机器上用来测试的那个)提供了NaN。
正如在被接受的答案中所说的那样,Date.parse(date)
也适用于数字。因此,为了避免这种情况,您还可以检查它是否不是一个数字(如果您想要确认这一点)。
var parsedDate = Date.parse(date);
// You want to check again for !isNaN(parsedDate) here because Dates can be converted
// to numbers, but a failed Date parse will not.
if (isNaN(date) && !isNaN(parsedDate)) {
/* do your work */
}
发布于 2014-03-11 02:40:02
像这样怎么样?它将测试它是Date对象还是date字符串:
function isDate(value) {
var dateFormat;
if (toString.call(value) === '[object Date]') {
return true;
}
if (typeof value.replace === 'function') {
value.replace(/^\s+|\s+$/gm, '');
}
dateFormat = /(^\d{1,4}[\.|\\/|-]\d{1,2}[\.|\\/|-]\d{1,4})(\s*(?:0?[1-9]:[0-5]|1(?=[012])\d:[0-5])\d\s*[ap]m)?$/;
return dateFormat.test(value);
}
我应该指出的是,这不会测试ISO格式的字符串,但是对于RegExp来说,稍微多做一点工作应该是很好的。
发布于 2016-07-27 23:14:59
此处的答案都不涉及检查日期是否无效,例如2月31日。此函数通过检查返回的月份是否等于原始月份并确保提供了有效的年份来解决此问题。
//expected input dd/mm/yyyy or dd.mm.yyyy or dd-mm-yyyy
function isValidDate(s) {
var separators = ['\\.', '\\-', '\\/'];
var bits = s.split(new RegExp(separators.join('|'), 'g'));
var d = new Date(bits[2], bits[1] - 1, bits[0]);
return d.getFullYear() == bits[2] && d.getMonth() + 1 == bits[1];
}
https://stackoverflow.com/questions/7445328
复制相似问题