Преобразование Moment.js и Unix Epoch
У меня есть веб-служба, возвращающая дату в виде следующей строки:
/Date(1377907200000)/
Я использую MomentJS для синтаксического анализа этого объекта moment
.
moment("/Date(1377907200000)/")
= > Fri Aug 30 2013 20:00:00 GMT-0400
Все это прекрасно. Но когда я вызываю unix()
на объект, мне присваивается значение 1377907200
. Это, однако, соответствует Fri Jan 16 1970 17:45:07 GMT-0500
. Я мог бы просто умножить значение, возвращаемое unix()
, но для меня это кажется неаккуратным. Я подозреваю, что то, что я делаю, вызывая unix()
, не совсем то, что я думаю. Нужно ли указывать какой-то формат при вызове unix()
? Что мне здесь не хватает?
JSFidle показывает преобразование в момент, а затем назад.
Ответы
Ответ 1
Ответ, предоставленный meagar, правильный, от строго временной перспективы JavaScript/Unix. Однако, если вы просто умножаетесь на 1000, вы потеряете любую промежуточную точность, которая могла существовать в ваших данных.
Moment.js предлагает два разных метода, как описано в документах. .unix()
возвращает значение в секундах. Он эффективно делит на 1000 и усекает любые десятичные числа. Вы хотите использовать метод .valueOf()
, который просто возвращает миллисекунды без изменений.
Ответ 2
На земле JavaScript, когда вы конвертируете Date
в целое число, вы получаете несколько секунд milli с момента unix. Традиционное время Unix - это количество секунд с эпохи. Правильный вариант - умножение на 1000.