Конструктор Date() Javascript не работает
У меня проблема -
Конструктор javascript Date("mm-dd-yyyy")
не работает для FF. Он отлично работает для IE.
- IE:
new Date("04-02-2008")
= > "Wed Apr 2 00:00:00 EDT 2008"
- FF2:
new Date("04-02-2008")
= > Invalid Date
Итак, попробуем попробовать другой конструктор. Попытка этого конструктора Date("yyyy", "mm", "dd")
- IE:
new Date("2008", "04", "02");
= > "Fri May 2 00:00:00 EDT 2008"
- FF:
new Date("2008", "04", "02");
= > "Fri May 2 00:00:00 EDT 2008"
- IE:
new Date("2008", "03", "02");
= > "Wed Apr 2 00:00:00 EDT 2008"
- FF:
new Date("2008", "03", "02");
= > "Wed Apr 2 00:00:00 EDT 2008"
Таким образом, конструктор Date("yyyy", "mm", "dd")
использует индекс 0
для представления января.
Кто-нибудь справился с этим?
Должен быть лучший способ, чем вычитать 1 из месяцев.
Ответы
Ответ 1
Это определение объекта Date для использования значений 0-11 для поля month
.
Я считаю, что конструктор, использующий String, зависит от системы (не говоря уже о зависимости от локали/временной зоны), поэтому вам, вероятно, лучше использовать конструктор, в котором вы указываете год/месяц/день как отдельные параметры.
Кстати, в Firefox,
new Date("04/02/2008");
отлично работает для меня - он будет интерпретировать косые черты, но не дефисы. Я думаю, это доказывает мою точку зрения, что использование String для создания объекта Date является проблемой. Вместо этого используйте явные значения для месяца/дня/года:
new Date(2008, 3, 2);
Ответ 2
Хороший трюк действительно, который я только что обнаружил, трудный путь (думая через него).
Но я использовал более естественную строку даты с дефис: -)
var myDateArray = "2008-03-02".split("-");
var theDate = new Date(myDateArray[0],myDateArray[1]-1,myDateArray[2]);
alert(theDate);
Ответ 3
Использование
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]);
Хорошо, но это показывает некоторые странные поведения, когда значения месяца и дня ошибочны.
Попробуйте ввести дату, в которой оба myDate[1]-1
и myDate[2]
имеют значения 55. Javascript по-прежнему возвращает дату, хотя вход явно не соответствует.
Я бы предпочел javascript для возврата ошибки в таком случае.
Ответ 4
@Frank: вы правы. Когда вам нужно подтвердить дату,
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]);
не будет работать.
Что происходит, так это то, что он продолжает добавлять дополнительный параметр. Например:
new Date("2012", "11", "57") // Date {Sat Jan 26 2013 00:00:00 GMT+0530 (IST)}
Объект Date принимает дополнительные дни (57-31 = 26) и добавляет его к дате, которую мы создали.
Или, если мы попытаемся создать объект даты с помощью:
new Date("2012", "11", "57", "57") //Date {Mon Jan 28 2013 09:00:00 GMT+0530 (IST)}
добавляются дополнительные 2 дня и 9 часов (57 = 24 + 24 + 9).
Ответ 5
Вы совершенно правы, месяц указывается как индекс, поэтому январь - месяц номер 0, а декабрь - месяц номер 11...
- и нет никакой работы, поскольку это четко указано в определении ECMA- script, хотя обычно выполняются простые трюки:
var myDate = "2008,03,02".split(",");
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]);
alert(theDate);
Ответ 6
Жирный оператор.
Это может заинтересовать вас: JavaScript Pretty Date.