Проблемы с датой 20 октября в некоторые годы

Я написал код в Javascript, который работал без каких-либо проблем. Но когда я поставил дату October 20, 2013, мне была возвращена дата October 19, 2013.

То же самое относится к годам 2019, 2024 и 2030 ( не проверено предыдущие годы, а не позднее).

Эта проблема проявляется во всех проверенных мной браузерах ( Google Chrome, Internet Explorer, Mozilla Firefox, Opera и < я > Сафари).

Когда я пишу:

date = new Date("10/20/2013");
document.write(date);

В результате получается:

Сб Октябрь 19 2013 23:00:00 GMT-0300 (BRT)


Кто-то может сказать мне, почему это происходит и как я могу решить эту проблему?

Ответ 1

20 октября 2013 года это переключение для BRST. Поэтому, если вы находитесь в Бразилии (в часовом поясе BRST), вы перейдете от BRT (UTC -3) к BRST (UTC-2).

От TimeAndDate.com:

Текущее время в Сан-Паулу: Среда, 22 мая 2013 года в 3:19:14 PM BRT

Сан-Паулу останется на БРТ до воскресенья 20 октября 2013 года BRST

Переход происходит в полночь и в полночь до 1 часа пропускается. Чтобы гарантировать время в эту дату, вы можете попробовать:

date = new Date("10/20/2013 01:00:00");

И вы должны получить 10/20/2013 01:00:00 с BRST как обозначение часового пояса.

Для кого-то в часовом поясе США, который участвует в DST, который хочет увидеть эту проблему; Используйте точку перехода на летнее время в США с 10 марта 2013 года, где 2am пропущен до 3 утра:

var d = new Date("03/10/2013 02:59:59")
alert(d);   // Returns 1:59:59 AM in the Standard Time Zone

var d = new Date("03/10/2013 03:00:00")
alert(d);   // Returns 3:00:00 AM in the Daylight Time Zone

Ответ 2

Некоторые браузеры могут показывать неправильные значения при использовании Date.parse(что совпадает с "новой датой (строкой)" ). Я не знаю причины, но лучший способ создания даты - использовать Конструктор даты (год, месяц, день).

Пример:

console.log(new Date(2013, 10, 20))