Javascript Moment.js 24小时时间格式,处理24小时

Javascript Moment.js 24小时时间格式,处理24小时,javascript,node.js,datetime,momentjs,Javascript,Node.js,Datetime,Momentjs,我使用momentjs检查火车旅行的两个时间戳之间的分钟差。 我用来从中获取数据的API以24小时格式返回时间(momentjs:HH:mm:ss) 如果旅行持续到第二天,时间显示为,例如,“24:12:00”,这很奇怪。Momentjs无法处理这个问题,如果我尝试用这些值计算时间差,我会得到“NaN” 因此,我创建了一个函数来将任何“24”事件转换为“00” 如果我使用diff()函数来检查一个时间戳和一个以“00”作为小时的时间戳之间的差异,我无法区分它是当前日期内的时间戳还是第二天的时间戳

我使用momentjs检查火车旅行的两个时间戳之间的分钟差。 我用来从中获取数据的API以24小时格式返回时间(momentjs:HH:mm:ss)

如果旅行持续到第二天,时间显示为,例如,“24:12:00”,这很奇怪。Momentjs无法处理这个问题,如果我尝试用这些值计算时间差,我会得到“NaN”

因此,我创建了一个函数来将任何“24”事件转换为“00”

如果我使用
diff()
函数来检查一个时间戳和一个以“00”作为小时的时间戳之间的差异,我无法区分它是当前日期内的时间戳还是第二天的时间戳。因此,如果当前时间为16:00(表示当天上午),则差值约为-900,而不是在下一天24小时前的正X分钟


你知道怎么处理吗?

因为你只是在处理一段时间,你会遇到这样的问题。当您只处理一个时间时,在解析时,矩假定为当前日期。当然,当您将这些小时数设置回零时,您就得到了所描述的问题-结束时间早于开始时间

这是不直观的,但我可能会使用set的“溢出”功能来解决这个问题

将值传递给力矩设置函数(
.hours()
.minutes()
等)时,如果该值超出允许的范围,它将溢出到下一个单位。你可以在这里利用这个优势。以后的时间(可能是24小时的时间)按原样分配。然后像这样做:

moment.utc('2016-01-01')
.set({hours:splitted[0], minutes:splitted[1], seconds:splitted[2]}).format()
作为发生情况的具体例子:

moment.utc('2016-01-01').set({hours:24, minutes:32, seconds:12}).format()
"2016-01-02T00:32:12Z"
正如你所看到的,24人把它推到了第二天

听起来这里只有时间,没有日期。如果这是正确的,那么我强烈建议您选择任意日期作为解析日期,并使用UTC模式进行分析

如果您在本地模式下使用带有任意日期的“时刻”,则可能会遇到由于DST转换而导致差异超出预期的问题。在UTC模式下,这些情况不会发生

值得注意的是,相反地,如果您确实知道日期,则应在正确的时区(如有必要,使用时刻时区)使用该日期,以便捕获可能导致相同两次之间小时差变化的DST转换


此外,手动设置日期可以避免可能出现的争用情况,即第一次调用的时间与第二次调用的时间不同。这是一个以后很难找到的bug。

我一定会尝试一下。
moment.utc('2016-01-01').set({hours:24, minutes:32, seconds:12}).format()
"2016-01-02T00:32:12Z"