Как сравнить временной интервал в JavaScript после преобразования часового пояса, используя момент JS - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть список времени (фактически, список объектов), например, 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 Ответ

0 голосов
/ 03 декабря 2018

Несколько вещей:

  • «Промежуток времени» обычно относится к продолжительности времени, а не времени суток.Это две совершенно разные концепции, которые иногда путают.Обратите внимание:

    • Временной интервал в 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
    
  • Моментне имеет строго типизированного объекта для времени суток, но вы можете использовать Moment в режиме UTC, чтобы у него не было переходов DST, а затем просто позволить ему использовать текущий день. HOWEVER :

    • Предполагается, что все значения времени суток, которые у вас есть, должны оцениваться в одну и ту же дату.Это может или не может иметь место.
    • Учтите, что если все, что у вас есть, это время суток и вы не знаете, с каких дат они, то значения ['23:00', '00:00'] могут быть уже отсортированы ис интервалом всего один час, или, может быть, они вне последовательности и с интервалом 23 часа.
...