我有一个时间跨度列表(实际上是对象列表),例如2:00、15:00、18:00等,它在utc中。 现在,我想将此时隙转换回CST,然后对其进行排序,因为我希望我的时间在CST中排序。
对于时区转换,我需要一个临时日期。所以我选择当前的utc日期 moment.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;
});
现在我想不使用格式进行字符串转换
答案 0 :(得分:0)
几件事:
“时间跨度”通常是指时间的持续时间,而不是时间。这是两个非常不同的概念,有时会混淆。考虑:
Moment.js中的tz
函数使用IANA time zone names。例如,您不应使用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模式下使用Moment,以便它没有DST转换,然后让它使用当天。 但是:
['23:00', '00:00']
可能已经被排序并且相隔仅一个小时,或者乱序了,相距23小时。