我在网页上有一个烦人的bug:

date.GetMonth()不是函数

所以,我想我做错了什么。变量date不是date类型的对象。如何在Javascript中检查数据类型?我试图添加一个if(日期),但不起作用。

function getFormatedDate(date) {
    if (date) {
       var month = date.GetMonth();
    }
}

所以,如果我想编写防御性代码并防止日期(不是一个)被格式化,我该怎么做?

谢谢

UPDATE:我不想检查日期的格式,但我想确保传递给getFormatedDate()方法的参数是date类型。


当前回答

如果您使用的是Typescript,可以使用Date类型进行检查:

const formatDate( date: Date ) => {}

其他回答

如果您不关心iframes/其他上下文,这是一种非常简单的方法。

// isNaN(Invalid Date) == true
if (date instanceof Date && !isNaN(date)) { // isNaN wont accept a date in typescript, use date.getTime() instead to produce a number
    console.log("is date!");
}

检查对象是否实际上是日期,而不是看起来像日期的对象。任何对象都可以有getMonth函数。确保日期不是无效日期不将值传递到新的Date()中,其中数字甚至字符串都可以转换为Date。

如果您需要支持iframes和不同的上下文,您可以使用接受的答案,但添加额外的检查以识别无效日期。

// isNaN(Invalid Date) == true
if (Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date)) {
    console.log("is date!");
}

你就不能用

function getFormatedDate(date) {
    if (date.isValid()) {
       var month = date.GetMonth();
    }
}

如果您使用的是Typescript,可以使用Date类型进行检查:

const formatDate( date: Date ) => {}

检测有效日期的最简单方法。

常量isDate=(str)=>{let timestamp=Date.parse(str);if(!isNaN(timestamp))返回新日期(timestaff);return false}console.log(isDate(“2020-11-11T12:55.123Z”))console.log(isDate(“17/7/22024”))console.log(“getMonth:”,isDate(“17/July/2024”).getMonth())console.log(isDate(“无效内容”))

您可以使用以下代码:

(myvar instanceof Date) // returns true or false