Данные, которые у вас есть, указаны в миллисекундах с 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).
Когда я запускаю 'console.log (момент (38700000) .format ('HH: mm'));' & 'console.log (момент (41400000) .format ('HH: mm'));' I получите значения 10:45 и 11:30 соответственно. Они находятся в 5:30 мин от ваших целевых значений, поэтому я бы удостоверился, что ваши часовые пояса верны (вероятно, лучше использовать UTC + 0). Вы можете передать 'x' в качестве аргумента формата, чтобы получить временную метку unix с даты. –
Я также хочу указать, что moment.unix (t) принимает временную метку unix в секундах, тогда как момент (t) принимает временную метку unix в миллисекундах. –
@SamJudge, спасибо за ответ. Мой часовой пояс +5: 30 GMT так, как его реализовать? – user7104874