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

date.GetMonth()不是函数

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

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

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

谢谢

UPDATE:我不想检查日期的格式,但我想确保传递给getFormatedDate()方法的参数是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(“无效内容”))

其他回答

作为通过

typeof date.getMonth === 'function'

您可以使用instanceof运算符,即,对于无效日期,它也将返回true,例如,new Date('random_string')也是Date的实例

date instanceof Date

如果对象跨越帧边界传递,则此操作将失败。

解决方法是通过

Object.prototype.toString.call(date) === '[object Date]'

受这个答案的启发,这个解决方案在我的情况下有效(我需要检查从API收到的值是否为日期):

!isNaN(Date.parse(new Date(YourVariable)))

通过这种方式,如果它是来自客户端或任何其他对象的随机字符串,您可以发现它是否是类似日期的对象。

您可以检查是否存在特定于Date对象的函数:

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

我们也可以通过以下代码验证它

var a = new Date();
a.constructor === Date
/*
true
*/

实际日期的类型为Object。但是您可以检查对象是否具有getMonth方法,以及它是否可调用。

function getFormatedDate(date) {
    if (date && date.getMonth && date.getMonth.call) {
       var month = date.getMonth();
    }
}