Как сравнить временной интервал в JavaScript после преобразования часового пояса, используя момент JS
У меня есть список времени (на самом деле, список объектов), например, 2:00, 15:00, 18:00 и т. Д., Он находится в utc. Теперь я хочу преобразовать этот временной интервал обратно в CST, а затем отсортировать его, как я хочу, чтобы мое время сортировалось в cst.
Для преобразования часового пояса мне понадобилась временная дата. поэтому я выбираю текущую дату utc по моменту.utc(mytimespan). и выполнил преобразование часового пояса.tz("CST").
Итак, список конвертируется в 20:00,9:00, 12:00
Здесь, пожалуйста, обратите внимание, что я получил 20:00 на первом месте вместо последнего места в списке. Это связано с датой, которая произошла в прошлом.
Все, что я хочу, это мое время в отсортированной форме без какого-либо влияния даты.
пожалуйста, я найду способ сделать это без преобразования строк!
Спасибо
Обновить
мой текущий рабочий код с использованием преобразования строк
TimeSpanDetails.sort(function compare(a, b) {
return moment(moment.utc(a.startTime).tz("CST").format("HH:mm"),"HH:mm").isAfter(moment(moment.utc(b.startTime).tz("CST").format("HH:mm"),"HH:mm")) ? 1 : -1;
});
Теперь я хочу сделать это без преобразования строки с использованием формата
1 ответ
Несколько вещей:
"Промежуток времени" обычно относится к продолжительности времени, а не ко времени суток. Это две совершенно разные концепции, которые иногда путают. Рассматривать:
- Временной интервал 99 часов вполне допустим, но "99:00" бессмысленно как время суток.
- Из-за перехода на летнее время и другие переходы часового пояса временной интервал не обязательно должен рассматриваться как "время с полуночи", потому что полночь может существовать или не существовать, или другой час дня может отсутствовать или повторяться.
- Интервалы времени могут быть отрицательными в некоторых языках программирования, обычно представляющих период до заданного момента времени.
tz
Функция в Moment.js принимает имена часовых поясов IANA. Вы не должны использоватьCT
или жеCST
, скорееAmerica/Chicago
, например. Однако часовые пояса совершенно не связаны с временными интервалами, поэтому вам не следует их применять вообще. Вам не нужен момент-часовой пояс.Момент представляет собой промежутки времени в
Duration
объекты. Вы можете разобрать их из строк следующим образом:var d = moment.duration('99:00');
Duration
объекты преобразуются численно в миллисекунды, поэтому они сопоставимы примерно так:var a = moment.duration('00:00'); var b = moment.duration('01:00'); var c = a < b; //=> true
Момент не имеет строго типизированного объекта для времени суток, но вы можете использовать Момент в режиме UTC, чтобы у него не было переходов DST, а затем просто позволить ему использовать текущий день. ОДНАКО:
- Это предполагает, что все значения времени суток, которые у вас есть, должны оцениваться в одну и ту же дату. Это может или не может иметь место.
- Учтите, что если у вас есть только время суток и вы не знаете, с каких дат они, то значения
['23:00', '00:00']
могут быть отсортированы уже и только с интервалом в один час, или, возможно, они вышли из последовательности и с интервалом в 23 часа.