【问题标题】:Perform Subtraction in Moment Js在 Moment Js 中执行减法
【发布时间】:2022-10-01 12:24:36
【问题描述】:

我想减去期间从价值结尾价值。我怎么能用 moment.js 做到这一点?我目前收到错误not valid ISO-8601 date format

let start = 1977
let end = 1985
let duration = moment(start.toString()).unix() - moment(end.toString()).unix();
let newvalue = = moment(end.toString()).unix() - moment(duration.toString()).unix();

我对持续时间的计算有效,所以我想复制它新价值,但这不起作用。我错过了什么吗?它必须是 ISO-8601 格式。

    标签: javascript momentjs


    【解决方案1】:

    您可以使用.add.subtract 方法来添加/减去持续时间。

    不是你的问题,但我希望持续时间是结束开始,而不是开始结束。

    以下是它的工作原理:

    let start = 1977
    let end = 1985
    let duration = moment(end.toString()).unix() - moment(start.toString()).unix();
    let newvalue = moment(end.toString()).subtract(duration, "second");
    
    console.log(newvalue.toString()); // Full date string 
    console.log(newvalue.year()); // 1977
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>

    请注意momentjs作者的信息:

    我们希望阻止 Moment 被用于未来的新项目

    【讨论】:

    • 谢谢你。我收到了.subtract is not a function。另外,有没有办法让我只将 1977 年作为 newValue 而不是整个格式?
    • 奇怪的是,你可以看到,当你运行这个 sn -p 时,它运行时没有错误。当然,您可以通过链接 .year() 方法(添加到我的答案中)来获取日期的年份。
    【解决方案2】:

    这就是我使用moment.duration()diff() 的方式。

    您可以使用asDays() 以天为单位或使用asHours() 以小时为单位获取持续时间。

    请检查下面的sn-p:

    let start = 1977
    let end = 1985
    let duration = moment.duration(moment(end.toString()).diff(moment(start.toString())));
    console.log(duration.asDays())
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>

    【讨论】:

      【解决方案3】:

      duration 应该已经以秒为单位表示持续时间,因此您可以从 moment(end.toString()).unix() 中减去它(表示自 Unix 纪元以来的秒数):

      let newvalue = moment(end.toString()).unix() - duration;
      

      请记住,在您的代码中,您是从start 值中减去end 值,因为start < end 是负数。我不认为这是故意的,因此您可以使用Math.abs() 或从start 中减去end

      【讨论】:

        【解决方案4】:
        1. 您需要从大值中减去小值。 在你的情况下,你应该subtract start from the end
        2. 你在unix中得到了duration值,所以你不需要再做一次

          let start = 1977
          let end = 1985
          let duration = moment(end.toString()).unix() - moment(start.toString()).unix();
          let newvalue = moment(end.toString()).unix() - duration;
          console.log(duration);
          <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>

        【讨论】:

          猜你喜欢
          • 2019-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-24
          • 2017-07-07
          • 2016-04-30
          • 1970-01-01
          相关资源
          最近更新 更多