【问题标题】:Get date-time from past date-time + duration从过去的日期时间 + 持续时间获取日期时间
【发布时间】:2018-03-23 17:24:04
【问题描述】:

该服务以ISO 8601 格式返回过去的日期时间,例如2018-03-23T08:00:00Z,并以PnYnMnDTnHnMnS 格式返回持续时间,例如:PT3H。从这两个值中,我需要计算持续时间结束的日期时间。所以在我的情况下,它将是2018-03-23T11:00:00Z。 我为此使用moment.js。问题是,当我试图获取持续时间结束日期时间时,它会返回一个人类可读的字符串,例如 in xy hours

我面临的问题:

  1. 它返回错误的持续时间。如果我有PT3H,它应该返回in 3 hours,但它会返回in 9 hours
  2. 结束日期时间应以毫秒为单位,目前为“人类可读形式”

我的代码:

let dur = moment.duration("PT3H");
let myDate = moment("2018-03-23T08:00:00Z");
myDate.from(dur); // It returns "in 9 hours"

JsBin

【问题讨论】:

    标签: momentjs


    【解决方案1】:

    您可以使用add(Duration) 将持续时间添加到您的日期,然后使用from

    请注意,from 接受:Moment|String|Number|Date|Array,而在您的代码中,您传递的是持续时间 (dur)。

    您可以使用diff 来获取以毫秒为单位的差异。

    如果您想获取时刻对象的 Unix 时间戳,您可以使用valueOf()

    这是一个现场样本:

    let dur = moment.duration("PT3H");
    let myDate = moment("2018-03-23T08:00:00Z");
    let m2 = myDate.clone().add(dur);
    console.log(m2.from(myDate));
    
    let diff = m2.diff(myDate);
    console.log(diff);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>

    【讨论】:

    • 谢谢@VincenzoC,它解决了第一个问题。但是如何将其转换为毫秒?
    • 知道了。 m2.valueOf() 会成功的。您可以将此添加到您的答案中吗?那我就接受了。
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多