Манипулирование датами с помощью moment.js - PullRequest
0 голосов
/ 04 декабря 2018

Я получаю от сервера следующую дату:

"2018-11-21 07:00:00 UTC"

Затем я конвертирую ее, используя переменную userTimzone (так как мне бы хотелось, чтобы редактор использовал часовой пояс пользователя):

dateOfAction: moment(dateOfLoss, 'YYYY-MM-DD HH:mm Z').tz(userTimzone).unix(), поэтому dateOfAction равно 1542776400.То есть: Wednesday, November 21, 2018 5:00:00 AM - и пока все хорошо.Это dateOfAction в UTC с правым смещением

Я использую react-datetime в качестве календаря для редактирования даты, используя UTC.При выполнении действия save, без касания даты, вывод календаря по-прежнему 1542783600, но я хочу быть 1542783600 - то есть то же значение, что и в начале, возвращая смещение нав другом направлении.

Как мне этого достичь?

1 Ответ

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

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

  • Момент не отображает токен Z в строку "UTC".Поскольку вы выполняете синтаксический анализ в локальном режиме, вы фактически получаете момент, основанный на часовом поясе локального компьютера, а не на UTC.Таким образом, измените первую часть вашего кода на:

    moment.utc(dateOfLoss, 'YYYY-MM-DD HH:mm [UTC]')
    

    Скобки должны рассматривать UTC как буквенную строку, которая не является строго обязательной, поэтому вы можете опустить ее, если хотите, и результат будетто же самое.

    moment.utc(dateOfLoss, 'YYYY-MM-DD HH:mm')
    
  • Нет необходимости звонить .tz(userTimezone), если вы просто собираетесь позвонить .unix() впоследствии.Временные метки Unix всегда основаны на UTC.Хотя непонятно, почему вы запрашиваете метку времени Unix, так как для реакции-даты это не нужно.

  • Два значения, которые вы указали в последнем абзаце вашего вопроса, идентичны, поэтому я не уверен, что конкретно вы искали.Время, которое вы указали, действительно 1542783600, а не 1542776400.

  • Файл readme реагирующего на дату описывает все опции, которые вы можете использовать.Вы можете просто передать объект момента, полученный выше, value реквизиту.Вам может понадобиться использовать реквизиты utc или displayTimeZone, если вы хотите изменить поведение.Вам также может понадобиться вызвать .local() или .tz(userTimezone) для объекта момента до его передачи, но я не уверен, требуется ли это для этого конкретного компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...