无效日期的“无效日期”? [复制]

Posted

技术标签:

【中文标题】无效日期的“无效日期”? [复制]【英文标题】:"Invalid Date" for an invalid date? [duplicate] 【发布时间】:2019-02-11 03:07:10 【问题描述】:

为什么 javascript 在设置(无效)日期时返回“无效日期”?似乎它应该出错/抛出异常并使其难以处理任何错误。

问题:处理此问题的最佳方法是在“更新”后检查日期值以查看该值实际上是日期还是“无效日期”的字符串值?

const validDate = new Date();
console.log('validDate instanceof Date:', validDate instanceof Date);

const invalidDate = new Date('asdfasdfasdf');
console.log('invalidDate instanceof Date:', invalidDate instanceof Date);

if (invalidDate) 
  // This hits because invalidDate is now a string and is therefore truthy
  console.log('Date is Valid');


if (invalidDate instanceof Date) 
  // This hits because it's still an instance of date (although the value is a string)
  console.log('Date is Valid');


if (typeof invalidDate === 'string') 
  // Doesnt hit because invalidDate is not a string

【问题讨论】:

你的if (invalidDate) 测试工作不是因为它是一个字符串,而是因为它是一个实例化的 Date 实例。我的意思是,你自己的代码表明这是真的。 如果new Date(...) 没有抛出异常,唯一可能的返回值是某种类型的实例化对象。它不会是一个字符串。 似乎new Date(<any invalid date value>) 应该抛出某种类型的异常,而不是仅仅返回“无效日期”。只是看起来有点奇怪...... 阅读规范。 ecma-international.org/ecma-262/6.0/… 看看这个:***.com/questions/1353684/… 【参考方案1】:

试试这个代码:

const invalidDate = new Date('aksjdhaksjdh');
console.log('invalidDate instanceof Date:', invalidDate.setUTCHours(0) instanceof Date);

setUTCHours() 方法根据 UTC 时间设置日期对象的小时。在这种情况下,由于我们的 var 无效,因此无法转换并返回 false。

【讨论】:

以上是关于无效日期的“无效日期”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中检测“无效日期”日期实例

隐藏luxon中的无效日期

检查 Amazon Redshift 中的无效日期

Chrome返回字符串“FY 2000”的有效日期而不是无效日期[重复]

日期选择器中带有时刻 js 的无效日期

Moment.js日期消息无效