Схватывание частей даты в другом часовом поясе с моментом - PullRequest
0 голосов
/ 11 декабря 2018

Это может быть странный вопрос, но у меня есть свидание, которое мне позже понадобится, чтобы взять его части для разных целей.Например, я беру день и показываю date.date() из moment.

Все, что найти и найти, но проблема в том, что часовые пояса имеют к этому отношение.Итак, у меня есть свой моментальный объект, который создается из строки:

const properDate = moment.tz(date, 'YYYY-MM-DD hh:mm:ss.SSS', 'America/New_York')

Из моего понимания, чтобы получить правильное время в часовом поясе, я бы сделал

properDate.format()

Но этопреобразует его в строку.И я хотел бы иметь возможность выбрать время и дни в правильном часовом поясе.Таким образом, в основном, когда я делаю properDate.hours(), я получу это во время UTC, но я хочу это в America/New_York.

Скажем, например, строку даты, которую я хочу вставить: 2018-12-31 02:00:00.000 +00:00

Когда я прогоню его через приведенный выше код и затем наберу properDate.hours(), я получу 2, но я бы хотел получить его в часовом поясе Нью-Йорка, который будет 21, а такжебыть предыдущим днем, если я хочу получить дату.

Полагаю, можно обойти это путем преобразования его в объект даты с помощью new Date и установки каждого из них вручную, возможно?Примерно так:

const dateWithTimezoneObject = new Date(properDate.year(), properDate.month(), properDate.date(), properDate.hours(), properDate.minutes())

Но это звучит немного беспорядочно, и мне было интересно, есть ли лучший способ сделать это, возможно, через мгновение.

Итак,есть ли для меня способ получить части объекта момента в правильном часовом поясе?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
  Test
  <script src="moment.js"></script>
  <script src="moment-timezone-with-data.js"></script>
  <script>
    const date = '2018-12-31 02:00:00.000 +00:00' 
    const new_york = moment(date,'YYYY-MM-DD HH:mm:ss.SSS Z')
      .tz('America/New_York')
    document.body.textContent = 
      `day: ${new_york.dates()} hour: ${new_york.hours()}`
  </script>
  </body>
</html>

https://momentjs.com/timezone/

0 голосов
/ 11 декабря 2018

Я считаю, что вы ищете:

var m = moment("2018-12-31 02:00:00.000 +00:00","YYYY-MM-DD HH:mm:ss.SSS Z")
           .tz('America/New_York');

m.hours() //=> 21

Несколько вещей:

  • Обратите внимание, что предоставленный формат ввода чувствителен к регистру и должен соответствоватьвходная строка.В вашем вопросе у вас было hh вместо HH, а также вы не указали Z для смещения часового пояса.

  • Есть two различные вкусы функции tz.moment.tz() предназначен для создания момента, когда входное значение соответствует этому часовому поясу.moment().tz() предназначен для преобразования момента в другой часовой пояс.

  • Хотя я только что использовал moment в моем примере выше, вы можете использовать moment.tz, moment.utc или moment.parseZone, и эффект будет таким же, но только потому, что вы включили смещение +00:00 во входную строку.Если у вас нет этого смещения, вы можете использовать moment.utc, например:

    var m = moment.utc("2018-12-31 02:00:00.000","YYYY-MM-DD HH:mm:ss.SSS")
                  .tz('America/New_York');
    
  • Что касается предложенного вами решения, это будет создавать Date объект, представляющий другой момент времени.В общем, если вы используете Moment, вам следует избегать использования объекта Date, если вместо этого вы можете использовать функцию Moment.

...