Как сравнить временной интервал в 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 часа.
Другие вопросы по тегам