Joe
Joe

Reputation: 163

can you use "-" instead of "/"with JavaScript Short Date format

On W3Schools, they showed entering a short date format with "/" as follows, new Date("03/25/2015"). I tried replacing the "/" with "-" as follows, new Date("03-25-2015") and that worked too. However, in reading through the website, I couldn't find that being mentioned as a valid alternative.

Is it? Even though it worked, is there any reason I should not use it and use the forward slash instead?

Upvotes: 6

Views: 7736

Answers (4)

andyk
andyk

Reputation: 1688

According to the ES5 spec, when the Date constructor is passed a string, it will use the same logic as Date.parse:

  1. Let v be ToPrimitive(value).
  2. If Type(v) is String, then

    a. Parse v as a date, in exactly the same manner as for the parse method (15.9.4.2); let V be the time value for this date.

Date.parse uses the Date Time String Format first, implementation-specific heuristics second:

The function first attempts to parse the format of the String according to the rules called out in Date Time String Format (15.9.1.15). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats.

The Date Time String Format is YYYY-MM-DDTHH:mm:ss.sssZ. YYYY, YYYY-MM and YYYY-MM-DD are also valid.

As Mottie notes, new Date("03-25-2015") fails in Firefox. However, this is only partly due to the hyphens. If you move the year to the front (new Date("2015-03-25")) the date string will conform to the Date Time String it succeeds.

Upvotes: 1

Animism
Animism

Reputation: 496

When you have questions like this, you should usually go straight to the canonical source to find out. In this case, the canonical source for JavaScript is the EMCAScript specification.

The relevant section is:

http://www.ecma-international.org/ecma-262/6.0/#sec-date.parse

It states:

Date.parse ( string )

[...]

The function first attempts to parse the format of the String according to the rules (including extended years) called out in Date Time String Format (20.3.1.16). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats.

In other words, the only formats guaranteed to be supported across all implementations are listed in Date Time String Format (20.3.1.16). Any formats other than those may or may not work depending on the implementation, and therefore should not be used.

To simplify section 20.3.1.16, the only valid format for dates is YYYY-MM-DD. Not surprisingly, W3Schools used an invalid format in their example.

An alternative source for JavaScript documentation is Mozilla Developer Network (MDN). It is not the canonical source, but is much higher quality than W3Schools and includes direct links to the canonical sources at the bottom of articles.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Upvotes: 0

stevelaaaa
stevelaaaa

Reputation: 85

From MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

One of the ways to create a new Date object is by new Date(dateString);. dateString is described as:

String value representing a date. The string should be in a format recognized by the Date.parse() method (IETF-compliant RFC 2822 timestamps and also a version of ISO8601). Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.

This method of creating a new Date object uses the Date.parse() method to parse the dateString string.

From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Date.parse() is defined:

The Date.parse() method parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC or NaN if the string is unrecognised or, in some cases, contains illegal date values (e.g. 2015-02-31).

ECMAScript 5 ISO-8601 format support

The date time string may be in ISO 8601 format. For example, "2011-10-10" (just date) or "2011-10-10T14:48:00" (date and time) can be passed and parsed. Where the string is ISO 8601 date only, the UTC time zone is used to interpret arguments. If the string is date and time in ISO 8601 format, it will be treated as local.

Therefore, the syntax you used, i.e. new Date("03-25-2015"), is valid syntax, but discouraged due to browser differences and inconsistencies.

Upvotes: 0

Mottie
Mottie

Reputation: 86413

If you try using new Date("03-25-2015") in Firefox, you'll get an "invalid date" message. So essentially, using dashes does not work across all browsers. It's better to stick with forward slashes (/).

The same goes with periods between the dates new Date("03.25.2015") is invalid in Firefox but not in Chrome.

Upvotes: 1

Related Questions