Конструктор Date принимает любое значение. Если примитив [[value]] аргумента является числом, то Дата создания имеет это значение. Если примитив [[value]] равен String, то спецификация гарантирует только то, что конструктор Date и метод parse способны анализировать результат Date.prototype.toString и Date.prototype.toUTCString ()
Надежный способ установить дату - создать ее и использовать методы setFullYear
и setTime
.
Пример этого появляется здесь:
http://jibbering.com/faq/#parseDate
ECMA-262 r3 не определяет форматы даты. Передача строковых значений в конструктор Date или Date.parse имеет результат, зависящий от реализации. Лучше всего избегать.
Изменить:
Запись из comp.lang.javascript FAQ:
Расширенный локальный формат даты ISO 8601
YYYY-MM-DD
можно преобразовать в
Date
с помощью следующего: -
/**Parses string formatted as YYYY-MM-DD to a Date object.
* If the supplied string does not match the format, an
* invalid Date (value NaN) is returned.
* @param {string} dateStringInRange format YYYY-MM-DD, with year in
* range of 0000-9999, inclusive.
* @return {Date} Date object representing the string.
*/
function parseISO8601(dateStringInRange) {
var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
if(parts) {
month = +parts[2];
date.setFullYear(parts[1], month - 1, parts[3]);
if(month != date.getMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}