使用 JavaScript 检查日期是否有效

使用 JavaScript 检查日期是否有效

Check if a Date is valid using JavaScript

检查日期是否有效:

  1. 检查日期是否是Date对象的实例。
  2. 检查将日期传递给isNaN()函数是否返回false.
  3. 如果满足这两个条件,则该日期有效。
索引.js
function dateIsValid(date) { return date instanceof Date && !isNaN(date); } console.log(dateIsValid(new Date('2022-03-36'))); // 👉️ false console.log(dateIsValid(new Date())); // 👉️ true console.log(dateIsValid(new Date('2022-03-24'))); // 👉️ true

我们创建了一个可重用的函数,它将一个Date对象作为参数并检查日期是否有效。

instanceof运算符返回一个布尔值,指示构造函数的原型属性是否出现在对象的原型链中。

索引.js
console.log(new Date() instanceof Date); // 👉️ true console.log({} instanceof Date); // 👉️ false console.log([] instanceof Date); // 👉️ false console.log('hi' instanceof Date); // 👉️ false

只有当左边的值是使用
Date()
构造函数或扩展它的类创建的时

instanceof
运算符才会返回。
true

第二个条件检查将日期传递给
isNaN
函数是否返回
false.

索引.js
function dateIsValid(date) { return date instanceof Date && !isNaN(date); }

isNaN函数接受一个值并尝试确定该值是否NaN
(不是数字)。

如果该值还不是数字,该isNaN函数会自动将其转换为一。

当您将有效日期转换为数字时,您会得到一个时间戳 – 从 1 月 1 日到给定日期之间经过的毫秒数。

索引.js
// 👇️ 1643112264226 console.log(Number(new Date())); // 👇️ NaN console.log(Number(new Date('2022-03-36')));

在第二个示例中,我们向Date构造函数传递了一个无效日期,因此将值转换为返回的数字NaN

如果Date是构造函数的一个实例Date()并且将其转换为数字没有NaN返回给我们(不是数字),那么我们有一个有效的Date.

应该注意的是,如果
对象是在另一个上下文中创建的,例如在外部 iframe 中,则
instanceof运算符将不起作用。Date

如果您Date在外部窗口或 iframe 中创建对象,请将对象的原型字符串化,而不是使用运算符。 instanceof
索引.js
function dateIsValid(date) { return ( Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date) ); } console.log(dateIsValid(new Date('2022-03-36'))); // 👉️ false console.log(dateIsValid(new Date())); // 👉️ true console.log(dateIsValid(new Date('2022-03-24'))); // 👉️ true

上面的代码片段只应在您Date
在外部窗口(例如 iframe)中创建对象时使用。

在所有其他情况下,instanceof运算符完成了工作并且更具可读性。

或者,您可以使用鸭子类型。

索引.js
function dateIsValid(date) { if ( typeof date === 'object' && date !== null && typeof date.getTime === 'function' && !isNaN(date) ) { return true; } return false; } console.log(dateIsValid(new Date('2022-03-36'))); // 👉️ false console.log(dateIsValid(new Date())); // 👉️ true console.log(dateIsValid(new Date('2022-03-24'))); // 👉️ true console.log(dateIsValid([])); // 👉️ true console.log(dateIsValid({})); // 👉️ true console.log(dateIsValid(null)); // 👉️ true
使用 duck-typing 时,我们只需检查对象是否实现了特定的属性或方法,如果实现了,我们就假定它是正确类型的对象。

我们首先检查传入的值是否为object.

由于null在 JavaScript 中也有一个对象类型,我们必须显式检查该值是否为 not null

然后,我们检查对象是否有getTime一个函数属性。Date
您可以对对象实现
的任何其他属性或方法重复此过程。

发表评论