Reputation: 405
Does anyone know why in Firefox if you execute the code below it will validate it as a date if the string passed in is four numbers and only four numbers? In every other browser I tested with (IE, Chrome) it will always return as not a date.
Being that the spec, as pointed out by Marcel Korpel below, states that it should fall back to use the Firefox's implementation-specific fall back I am really wondering why Firefox's fall back displays this anomaly.
function isDate(sDate) {
var temp = new Date(sDate);
if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") {
alert("Not a Date");
} else {
alert("Is a Date!");
}
}
Upvotes: 5
Views: 3840
Reputation: 1204
This works in all browsers -
new Date('2001/01/31 12:00:00 AM')
Upvotes: 1
Reputation: 11
Do not rely on date validation in javascript. The local date time format may create some problem with the javascript date object.
use following approach
Upvotes: 1
Reputation: 21763
If you pass a string to the Date
constructor, the string should be in a format recognized by the parse method (IETF-compliant RFC 1123 timestamps) (source: MDC). Everything else results in implementation specific behaviour and will vary across browsers.
I suggest you don't use strings at all and either use three numbers representing year, month and day (mind that month numbers begin at 0 (= January)), or use one number, the number of milliseconds since 1 January 1970 00:00:00 UTC.
UPDATE: seeing your example,
var a = new Date('0123');
console.log(a);
outputs
Fri Jan 01 0123 01:00:00 GMT+0100 (CET)
so Firefox apparently recognizes '0123'
as a year number.
UPDATE 2: I think MDC's description of Date.parse
contains the answer to your question:
Starting in JavaScript 1.8.5, a subset of ISO 8601 formatted date strings can also be parsed.
The ISO 8601 page specifies (section 'Formats'):
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
So when relying on ISO 8601, a string only containing four numbers will be recognized as a year number.
Upvotes: 5
Reputation: 8770
I have encountered the same issue as with this in firefox, for some reasons I cannot explain any 4 digit numeric chars is a valid date in FF, in other browsers this is NaN:
A bit nasty work-around for FF but, this worked for me:
function isDate(sDate) {
if(sDate.match(/^\d{4}$/))
return false;
var temp = new Date(sDate);
if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") {
alert("Not a Date");
} else {
alert("Is a Date!");
return true;
}
}
Upvotes: 0