Конструктор Javascript Date () не работает

У меня проблема -

Конструктор 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 из месяцев.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
28
0
52 930
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Это определение объекта Date для использования значений 0-11 для поля month.

Я считаю, что конструктор, использующий String, зависит от системы (не говоря уже о зависимости от языкового стандарта / часового пояса), поэтому вам, вероятно, лучше использовать конструктор, в котором вы указываете год / месяц / день в качестве отдельных параметров.

Кстати, в Firefox

new Date("04/02/2008");

у меня отлично работает - он будет интерпретировать косые черты, но не дефисы. Я думаю, это доказывает мою точку зрения о том, что использование String для создания объекта Date проблематично. Вместо этого используйте явные значения для месяца / дня / года:

new Date(2008, 3, 2);

Смелое заявление.

Это может вас заинтересовать: JavaScript Pretty Date.

Вы совершенно правы, месяц указан как индекс, поэтому январь - это месяц под номером 0, а декабрь - под номером 11 ...

- и нет никакого обходного пути, как это четко указано в определении-сценария ECMA, хотя обычно срабатывают простые трюки:

var myDate = "2008,03,02".split(",");
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
alert(theDate);

действительно хороший трюк, который я только что выяснил на собственном горьком опыте (подумав над ним). Но я использовал более естественную строку даты с дефисом :-)

var myDateArray = "2008-03-02".split("-");
var theDate = new Date(myDateArray[0],myDateArray[1]-1,myDateArray[2]); 
alert(theDate);

С использованием

var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 

Это нормально, но показывает странное поведение, когда значения месяца и дня ошибочны.

Попробуйте преобразовать дату, в которой myDate[1]-1 и myDate[2] имеют значения 55. Javascript по-прежнему возвращает дату, хотя ввод явно неверен.

Я бы предпочел, чтобы в таком случае javascript возвращал ошибку.

@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).

Другие вопросы по теме