new Date() возвращает день до дня в строке даты и времени в JavaScript

У меня есть существующая строка даты и времени

new Date('2014-08-01T00:00:00')

Но вместо возврата 2014-08-01, он возвращается как 2014-07-31 в представлении angularJS.

Интересно, эта строка даты и времени действительна, если нет, то почему она не действительна.

Может ли T быть причиной того, что строка возвращает неправильную дату?

Console.log возвращает дату Thu Jul 31 2014 20:00:00 GMT-0400 (EDT)

Благодарю вас

Давайте назовем эти -2 ядовитыми. Они должны действительно вспомнить те дни, когда они изо всех сил пытались понять основные концепции, которые сейчас им присущи. Это позор.

3 ответа

Решение

В настоящее время (осень 2014 г.) формат даты / времени в JavaScript отличается от ISO-8601 очень важным образом: если в строке нет индикатора часового пояса, он предполагает Z ("Зулу", GMT).

Так

new Date('2014-08-01T00:00:00')

... 1 августа в полночь по Гринвичу. Если вы живете к востоку от времени по Гринвичу, это будет 31-е по вашему местному времени.

Однако эта несовместимость с ISO-8601 исправлена ​​в ES6, и некоторые реализации (включая последнюю версию V8 в Chrome) уже обновляют ее. Спецификация ES6 меняет значение по умолчанию на местное время; см. §20.3.1.15 ("Формат строки даты и времени", номер раздела может измениться) в черновиках PDF или этой неофициальной HTML-версии.

Отображаемая дата использует часовой пояс вашего браузера / компьютера. Это означает, что если вы находитесь в GMT-1 и вводите 2014-08-01T00:00:00фактическая дата 2014-08-01T00:00:00 - 1 hour знак равно 2014-07-31T23:00:00

У меня есть эта дата в startdate=2021-10-27T00:00:00-04:00,d=new Date(data.StartDate) // outputTue 26 октября 2021 23:00:00 GMT-0500 Но дата становится на один день до «Вторник, 26 октября 2021 г., 23:00:00 GMT-0500» в центральном часовом поясе (ниже -6,-7,-8...).

На самом деле я использовал это, он работает нормально, но для центрального часового пояса не работает var d = new Date(data.StartDate);console.log(данные.startDate);$scope.txtStartDate = ("0" + (d.getMonth() + 1)).slice(-2) + "/" + ("0" + d.getDate()).slice(-2) + " /" + d.getFullYear();

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