Which should be the correct date format for Date.parse ?

M

Matteo

Hy everybody.

I'm not a html writer, but a sysadmin who's trying to help a user able
to compile an online form with IE but not with Mozilla (Moz1.6, Ns7.1,
Firefox 0.8+) due to a javascript date check.

Let's go straight to the point:

<script language="JavaScript">
alert("Date: "+Date.parse("2000-01-01"))
// On IE and Mozilla: "Date: NaN"

alert("Date: "+Date.parse("01-01-2000"))
// On IE: "Date: 946681200000"
// On Mozilla: "Date: NaN"

alert("Date: "+Date.parse("01/01/2000"))
alert("Date: "+Date.parse("2000/01/01"))
// On IE and Mozilla: "Date: 946681200000"
</script>

This happens on italian win2000 and winxp, italian IE6, italian Moz1.6,
english Ns7.1, english Firefox 0.8.0+.

Obviously the solution is the third example, and I've yet mailed it to
the webmaster, who is using the second format, 01-01-2000; but is it
correct that in both Mozilla and IE Date.parse doesn't accept the
iso8601 format 2000-01-01 or maybe is something of which mozilla
developers should be aware? Or maybe the examples above are an improper
use of Date.parse?

I read the paragraph 15.9.4.2 of ecmascript 262 pdf, but it's not so
clear about possible date formats; or maybe it refers to something that
I cannot understand.


Thank you.
Matteo
 
E

Evertjan.

Matteo wrote on 15 jun 2004 in comp.lang.javascript:
Obviously the solution is the third example, and I've yet mailed it to
the webmaster, who is using the second format, 01-01-2000;

This format cannot be used, since it is regional settings dependent:

01-07-2004 means 1st of juli in some pc's but 7th of january in others.

Do not trust all Italian pc's to have been set "correctly".

Do not test on 01-01-2000, since that date will be "correct" in both
circumstances.
 
M

Matteo

Evertjan. ha scritto:
Matteo wrote on 15 jun 2004 in comp.lang.javascript:
This format cannot be used, since it is regional settings dependent:

01-07-2004 means 1st of juli in some pc's but 7th of january in others.

Do not trust all Italian pc's to have been set "correctly".

Do not test on 01-01-2000, since that date will be "correct" in both
circumstances.

This is right; but I was wondering also why both IE and Mozilla accept
AAAA/MM/DD and don't accept AAAA-MM-DD format, that is an iso standard;
maybe Date.parse is intended to handle only long formats like '15 Jun
2004 07:59:19 GMT', and supports other formats only for proprietary
extension ?

Anyway, mine is just an academic discussion about which date standard
formats the browsers should and shouldn't accept for Date.parse;
certainly the 01-01-2000 format is an ambiguous format and must not be
used to calculate dates.

Bye.
Matteo
 
T

Thomas 'PointedEars' Lahn

Matteo said:
[...] I was wondering also why both IE and Mozilla accept AAAA/MM/DD

Downwards compatibility.
and don't accept AAAA-MM-DD format, that is an iso standard;

It is still the wrong format:

<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/date.html#1193137>
<http://msdn.microsoft.com/library/en-us/script56/html/js56jsobjdate.asp?frame=true>
maybe Date.parse is intended to handle only long formats like '15 Jun
2004 07:59:19 GMT',

That may be the reason. AFAIS the ECMAScript 3 specification does
not specify the date format that Date.parse() should accept, only
ways how its argument can be interpreted.
and supports other formats only for proprietary extension ?
Apparently.

Anyway, mine is just an academic discussion about which date standard
formats the browsers should and shouldn't accept for Date.parse; [...]

Since date strings are always ambiguous, one should use

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ]
] ] ] )

as clearly specified in ECMAScript 3, section 15.9.3.1, instead.


PointedEars
 
D

Dr John Stockton

JRS: In article <[email protected]>, seen in
news:comp.lang.javascript said:
Evertjan. ha scritto:

This is right; but I was wondering also why both IE and Mozilla accept
AAAA/MM/DD and don't accept AAAA-MM-DD format, that is an iso standard;
maybe Date.parse is intended to handle only long formats like '15 Jun
2004 07:59:19 GMT', and supports other formats only for proprietary
extension ?

Only an optimist expects software written in the USA to understand
International Standards. They do not even understand the word
"International"; they generally use it as near-synonymous with
"Foreign". In truth, "International" means "the same world-wide
(including, if possible, the USA)" and "Multi-National" is better for
"customised, correctly or otherwise, for assumed location".

Anyway, mine is just an academic discussion about which date standard
formats the browsers should and shouldn't accept for Date.parse;
certainly the 01-01-2000 format is an ambiguous format and must not be
used to calculate dates.

It should indeed never be used, except for the Nth day of the Nth month.
I believe that the true ISO format, YYYY-MM-DD, should be used wherever
practical; but in javascript using - as a separator is at best unsafe.
I've "always" recommended and used YYYY/MM/DD in javascript, and have
never been told of any problem with it.

Actually, I think I never tried xx-xx-xxxx (knowing xxxx-xx-xx to fail);
my MSIE4 takes it as MM-DD-YYYY, which is unacceptable.

A parser should be liberal, but not to the point of accepting ambiguity.
Ideally, it would accept only "YYYYxMMxDDyHHzMMzSS Zone" in which x y &
z are any plausible separators; and there would be another form, or an
optional extra parameter, for specifying the date field order.

Your "946681200000" is of course when Year 2000 started in Italy.
Canadians get a larger number.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top