util: improve util.isDate() function
authorNathan Rajlich <nathan@tootallnate.net>
Wed, 31 Aug 2011 06:13:45 +0000 (23:13 -0700)
committerBen Noordhuis <info@bnoordhuis.nl>
Fri, 2 Sep 2011 15:29:20 +0000 (17:29 +0200)
The old implementation was fragile. i.e. node-time is an example of a user-land
module that exports an extended Date object (with a few added functions on it's
own Date object's prototype). In that case, the old check fails.

lib/util.js

index 1a04190..f47e39f 100644 (file)
@@ -332,11 +332,8 @@ function isRegExp(re) {
 
 
 function isDate(d) {
-  if (d instanceof Date) return true;
-  if (typeof d !== 'object') return false;
-  var properties = Date.prototype && Object.getOwnPropertyNames(Date.prototype);
-  var proto = d.__proto__ && Object.getOwnPropertyNames(d.__proto__);
-  return JSON.stringify(proto) === JSON.stringify(properties);
+  return d instanceof Date ||
+    (typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]');
 }