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!");
}
}
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.
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
This works in all browsers -
new Date('2001/01/31 12:00:00 AM')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With