Как преобразовать время в конкретную строку? - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю с датой, которая выглядит следующим образом:

Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)

, и я пытаюсь преобразовать ее в это:

2019-02-04T15:57:02.000Z

, но по какой-то причине мой кодвсегда добавляет 7 часов и в итоге получается так:

"2019-02-05T22: 57: 02.000Z"

Может кто-нибудь сказатьмне что я делаю не так?Заранее большое спасибо!

Вот мой код:

new Date(myTime as string).toISOString();

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Я не уверен, как получить это как однострочник, но это один из способов:

var time = new Date('Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)')
new Date(time.setHours(time.getHours() + 7)).toISOString()

"2019-02-05T12:57:02.000Z"
0 голосов
/ 08 февраля 2019

Ваш код не добавляет часов к дате ввода.Происходит следующее: ваша строка даты использует определенный часовой пояс GMT-0700 (Mountain Standard Time), а часовой пояс, используемый в new Date().toISOString(), - это UTC GMT+0000 (UTC).Таким образом, когда Mountain Standard Time часовой пояс равен Mon Feb 04 2019 15:57:02, в UTC часовой пояс фактически равен 2019-02-05T22:57:02.000Z.У вас есть семь часов с GMT-0700 до GMT+0000.

РЕДАКТИРОВАНИЕ

Если вы действительно не заботитесь о часовых поясах и хотите получить 2019-02-04T15: 57: 02.000Z с понедельника, 04 февраля 2019 15:57:02 GMT-0700 (стандартное время в горах) вы можете просто удалить все после GMT, чтобы new Date () думала, что это дата UTC.

var timeString = 'Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)';
new Date(timeString.substr(0, timeString.indexOf('GMT') + 3));

2019-02-04T15:57:02.000Z
0 голосов
/ 08 февраля 2019

Я бы использовал Moment.js , которая является достойной библиотекой для разбора и форматирования дат.Чтобы получить то, что вы ищете, вы должны использовать выражение вроде:

console.log(moment
  .parseZone(
    "Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)",
    "ddd MMM DD YYYY HH:mm:ss 'GMT'ZZ") // the format of the string presented
  .local()
  .format('YYYY-MM-DDTHH:mm:ss')); // the format of the output
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

Я разбил одну строку на части, чтобы ее было легче читать.Несколько примечаний:

  • parseZone позволяет вам анализировать "-0700" из строки.
  • localпреобразует дату из проанализированного часового пояса в текущий часовой пояс
  • format форматирует дату.

format В теме есть список используемых токенов форматирования.В теме Parse> String + Format перечислены токены синтаксического анализа (которые по большей части совпадают с токенами форматирования).

Обратите внимание, что в выводе отсутствует буква Zконец;это важно, потому что без «Z» это локальная дата.Буквой «Z» вы фактически указываете дату и время, которые на 7 часов раньше, чем те, которые вам дали.

...