在JavaScript中,有没有一种方法可以检查一个变量是否为日期类型?

112

我在想是否有办法在JavaScript中检查一个对象是否是日期类型。isType返回的是Date对象的object,这对于这种情况还不够。 有什么建议吗?谢谢!

4个回答

212

使用 instanceof

(myvar instanceof Date) // returns true or false

10
它在大多数情况下是有效的,但在多帧DOM环境下会失败,请查看[这篇文章](http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/)。 - Christian C. Salvadó
6
我用一个“无效日期”进行测试,它返回了true!! - Roshdy
在我的情况下,我在日期字段中使用了DHTMLX日历类型,但它并没有按预期工作。 - lnepal

44

Object.prototype.toString.call(obj) === "[object Date]" 这段代码在任何情况下都能正常工作,而 obj instanceof Date 只能用于相同视图实例 (window) 中的日期对象。


这个在你有从日期继承的东西时不能工作,是吗? - Claudiu
这就是 Ext JS 的做法。不确定其他框架,但这是我会考虑的。 - Brian Moeskau
2
@Claudiu:不,但说实话,我认为你永远不需要创建一个从Date.prototype继承的对象实例...... @bmoeskau,这是检测内置构造函数生成的对象类型的最安全方法,例如ArrayRegExpDate等。其他框架,如jQuery使用此方法来检测Array对象Prototype也用它来检测包装的原始值,因为这些包装器是对象,例如typeof new String("") == 'object';,并且用于检测Opera。 - Christian C. Salvadó
如果它继承自Date,那么它就是一个Date对象。这似乎是一个非常好的答案! - Loupax
d.constructor.name 进行测试不是更好吗? - Derek 朕會功夫

-2

如果(obj && obj.getUTCDay){ // 我会把它当作日期处理 }


如果您在一个完全不相关的对象上有一个类似于“getUTCDay”的方法,即使它不是日期,这将返回obj为真。 - John Feminella
3
更有可能的是,如果在您的代码库中的某个地方之后有人编写了一个getUTCDay方法,他们可能会有一个漫长的下午来调试它 ;) - Brian Moeskau

-6
if (parseDate("datestring"))

1
我假设你意识到这与检查日期对象类型不同,这似乎是问题所在? - Brian Moeskau
哦!我误解了问题 =/ 我的错。 - Germán Rodríguez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接