gpt4 book ai didi

javascript - 时刻js返回总是零时间

转载 作者:行者123 更新时间:2023-12-03 02:12:59 25 4
gpt4 key购买 nike

我正在尝试获取现在和 future 时间之间的持续时间:

var d = moment.utc('27.03.2018 - 15:43:01', 'DD.MM.YYYY - HH:mm:ss')
var v = moment.utc(moment.duration(d).asMilliseconds()).format("HH:mm:ss")
console.log(v);

问题是 v 总是 00:00:00,为什么?

d 是有效的矩对象。

最佳答案

调用duration(param)时,参数必须是文档中描述的值之一:https://momentjs.com/docs/#/durations/creating/

例如:如果您像 moment.duration(100) 那样调用它,则会创建 100 毫秒的持续时间。持续时间表示耗时跨度,或“时间量”。

如果您向其传递一个日期对象 (moment.duration(d)),则这是没有意义的。您正在尝试根据日期值创建持续时间(耗时跨度)。这是对两个概念的误解:

  • 日期/时间代表日历中的特定点
  • 持续时间代表一段耗时,它不附加到日历中的任何特定点

您可以执行以下操作:

  • 计算 2 个日期之间的差异:结果是一个持续时间(今天上午 10 点到明天下午 2 点之间,差异 - 持续时间为 28 小时 - 不考虑 DST 影响:https://www.timeanddate.com/time/dst/transition.html)
  • 在日期中添加/减去持续时间:今天上午 8 点,加上 2 小时的持续时间,等于今天上午 10 点

但是,在没有另一个日期作为引用的情况下,从一个日期创建持续时间是没有意义的。在这种特定情况下,moment 只是决定返回一个值为零的持续时间:打印 moment.duration(d) 的值,您将看到 P0T -这是零持续时间的 ISO 8601 表示:https://en.wikipedia.org/wiki/ISO_8601#Durations

然后调用.asMilliseconds(),它返回持续时间表示的总毫秒数。在本例中,它返回零。

然后调用 moment.utc() 将上面的结果作为参数传递。换句话说,您所做的与 moment.utc(0) 相同。当您将数字传递给 utc() 时,它会将这个数字解释为“自 Unix 纪元以来的毫秒数”:https://momentjs.com/docs/#/parsing/utc/

当您传递零时,结果是 Unix 纪元本身,即 UTC 1970 年 1 月 1 日午夜

然后调用 .format("HH:mm:ss") 打印小时、分钟和秒。由于 moment.utc(0) 是午夜,因此结果为 00:00:00

如果您想计算 2 个日期之间的差异,请使用 diff 方法,如 Pavlo 的答案所述。

关于javascript - 时刻js返回总是零时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49476490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com