Преобразование 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.