2017-02-20 7 views
2

Я использую bs-datepicker для экономии времени как номер в mongodb. В mongodb, оно имеет время поле со значением i.e, 38700000 и 41400000 которые 16.15 и 17.00 соответственно.Как форматировать число как время в Моменте?

Теперь я хочу отформатировать вышеуказанное время в читаемой форме. Я использую moment 2.16. Здесь я попробовать, но не смог сделать jsfiddle

console.log(moment.unix(38700000).format('HH:mm')) //03:30, expect:16:15 
console.log(moment.unix(41400000).format('HH:mm')) //09:30, expect:17:00 

И, как конвертировать из HH: мм номер. например, 18:71 конвертировать в цифру

+1

Когда я запускаю 'console.log (момент (38700000) .format ('HH: mm'));' & 'console.log (момент (41400000) .format ('HH: mm'));' I получите значения 10:45 и 11:30 соответственно. Они находятся в 5:30 мин от ваших целевых значений, поэтому я бы удостоверился, что ваши часовые пояса верны (вероятно, лучше использовать UTC + 0). Вы можете передать 'x' в качестве аргумента формата, чтобы получить временную метку unix с даты. –

+1

Я также хочу указать, что moment.unix (t) принимает временную метку unix в секундах, тогда как момент (t) принимает временную метку unix в миллисекундах. –

+0

@SamJudge, спасибо за ответ. Мой часовой пояс +5: 30 GMT так, как его реализовать? – user7104874

ответ

2

Данные, которые у вас есть, указаны в миллисекундах с 1970-01-01 00: 00: 00.000 UTC.

38700000 == 1970-01-01T10:45:00Z 
41400000 == 1970-01-01T11:30:00Z 

Если вы конвертировать те в часовой пояс вы упоминали в комментариях (UTC + 05: 30), то время часть значений выравнивают до того, что вы ожидали.

38700000 == 1970-01-01T10:45:00Z == 1970-01-01T16:15:00+05:30 
41400000 == 1970-01-01T11:30:00Z == 1970-01-01T17:00:00+05:30 

Ваши ценности не совпадают на всех, потому что вы используете unix моментная функция, которая рассчитывает время в секундах, а не миллисекунды (потому что Unix Time в целых секунд, если не указано иное).

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

Правильный способ получить то, что вы просили это:

moment(38700000).utcOffset("+05:30").format("HH:mm") // "16:15" 
moment(41400000).utcOffset("+05:30").format("HH:mm") // "17:00" 

Узнает, однако, что это означает, что ваши исходные данные не сохраняются со ссылкой на UTC, но со ссылкой на UTC + 05: 30. Было бы лучше, если бы вы хранили значение UTC на основе вместо этого, так что вы должны сделать следующее:

moment.utc(58500000).format("HH:mm") // "16:15" 
moment.utc(61200000).format("HH:mm") // "17:00" 

Конечно, реальная проблема здесь состоит в том, что вы храните время-дня в дата-время поле. Вероятно, лучше всего не использовать тип Date вообще в ваших данных MongoDB, а просто сохранить строку "16:15" или эквивалентное количество минут в виде целого числа (60 * 16 + 15 == 975).

+1

спасибо за короткий пример. Последний абзац потрясающий, это хороший способ. – user7104874

Смежные вопросы