MomentJS неверно обрабатывает метку времени Unix, отправленную через GET-запрос - PullRequest
0 голосов
/ 20 января 2019

У меня есть массив из 2 строк, каждая из которых находится во времени Unix.

[1484930449590,1548002449590]

Преобразование их обратно в удобочитаемое время дает мне сегодняшнюю дату и дату 2 года назад.

Однако, когда я анализирую обе эти метки времени с MomentJS:

const start = moment(timeRange[0])
const end = moment(timeRange[1])

, я получаю следующие значения:

moment("2001-01-01T00:00:00.000")
moment("2001-04-01T00:00:00.000")

По какой-то причине momentJS преобразует обе метки времени вгод 2001, хотя годы должны быть 2019 и 2017.

Сначала анализ строк не улучшает ситуацию:

const start = moment(parseInt(timeRange[0]))
const end = moment(parseInt(timeRange[1]))

Теперь start и end:

moment("1969-12-31T19:00:00.001")
moment("1969-12-31T19:00:00.004")

Кто-нибудь знает, что происходит?

Я попробовал следующее решение:

console.log(timeRange)
const start = moment(parseInt(timeRange[0]) / 1000)
console.log(start)
const end = moment(parseInt(timeRange[1]) / 1000)
console.log(end)

, но ничего не изменилось:

1484931697215,1548003697215
moment("1969-12-31T19:00:00.000")
moment("1969-12-31T19:00:00.000")

Обновление:

Проблема в том, что я ошибся, считая timeRange массивом.Скорее, это была на самом деле строка.Это произошло потому, что на стороне клиента timeRange был массив, но когда он был отправлен как GET-запрос на сервер и получен с const timeRange = req.query.timeRange, он был преобразован в строку.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Проблема в том, что я ошибался, считая timeRange массивом. Скорее, это была на самом деле строка. Это произошло потому, что на стороне клиента timeRange был массивом, но когда он был отправлен как часть GET-запроса на сервер и получен с помощью const timeRange = req.query.timeRange, он был преобразован в строку.

Решением было преобразовать timeRange обратно в массив:

const times = req.query.timeRange.split(",")
const startDate = moment(parseInt(times[0]))
const endDate = moment(parseInt(times[1]))
0 голосов
/ 20 января 2019

Ваша метка времени указывается в миллисекундах, а не в секундах. Попробуйте сначала разделить на 1000:

const start = moment(parseInt(timeRange[0]/1000))
const end = moment(parseInt(timeRange[1]/1000))

Это должно дать вам правильную дату

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