【问题标题】:Adding minutes to datetime in momentjs在momentjs中将分钟添加到日期时间
【发布时间】:2017-06-21 06:38:48
【问题描述】:

我需要将变量secondsToMinutes 添加到startdate

secondsToMinutes 是“3:20” startDate = "下午 2:00" endDate 应等于“下午 2:03:20”。 我尝试了很多方法,每次都出错。

   var startdate = data.StartTime;
   startdate = moment(startdate).format('LTS');

   var secondsToMinutes = readableDuration(self.runlength());//='3:20';

   var seconds = secondsToMinutes.split(':')[1];
   var minutes = secondsToMinutes.split(':')[0];

   var date = moment(startdate)
        .add(seconds, 'seconds')
        .add(minutes, 'minutes')
        .format('LTS');

日期显示为无效日期。

【问题讨论】:

    标签: javascript datetime momentjs


    【解决方案1】:

    .add 操作已从 moment.js 中弃用 您可以使用 dayjs 执行相同的功能。

    dayjs.add(1, 'day')

    如果要寻找更多从现在开始转变的理由: https://inventi.studio/en/blog/why-you-shouldnt-use-moment-js

    【讨论】:

      【解决方案2】:

      moment().format("LTS") 返回hh:mm:ss AM/PM 格式的字符串值。 当您使用非标准格式的字符串创建矩对象时,应将输入格式作为第二个参数传递给矩构造函数。

      例如:Jan 1, 2017 in string 01012017 不是标准表示。但是,如果您需要一个时刻对象,使用moment("01012017") 将在格式化时给出“无效日期”响应。相反,请使用moment("01012017","DDMMYYYY")

      var d = moment("01012017")
      d.toISOString() => "Invalid date"
      
      var d = moment("01012017", "DDMMYYYY")
      d.toISOString() => "2016-12-31T18:30:00.000Z"
      

      在您的代码中,当创建“日期”变量时,将“hh:mm:ss A”作为时刻构造函数中的第二个参数传递,如下所述。

         var date = moment(startdate, "hh:mm:ss A")
              .add(seconds, 'seconds')
              .add(minutes, 'minutes')
              .format('LTS');
      

      【讨论】:

        【解决方案3】:

        Moment 有非常好的文档。我会检查一下:http://momentjs.com/docs/

        但要更直接地解决您的问题,您可以执行以下操作:

        var secondsToMinutes = '3:20';
        var seconds = secondsToMinutes.split(':')[1];
        var minutes = secondsToMinutes.split(':')[0];
        
        var momentInTime = moment(...)
                           .add(seconds,'seconds')
                           .add(minutes,'minutes')
                           .format('LT');
        

        您应该尽您所能使用实际的处理程序。现在你可以用持续时间做一些很酷的事情,但是这更简洁。

        编辑:

        正如另一个答案中提到的那样:

         moment('2:00:00 PM', 'h:mm:ss A')
        

        如果您正在处理 格式,则这是必需的。无论如何 - 向时刻对象添加/减去分钟/小时是微不足道的。将无效字符串传递给时刻对象本身就是一个不同的问题。 ;)

        【讨论】:

        • “3:20”时间可以直接使用moment.duration("3:20")解析
        • 我编辑了我的代码,以尽我所知反映您的建议。我收到错误日期说无效日期
        • 我编辑了我的答案。确保将有效字符串传递给构造函数是开发人员的责任,而不是时刻库。 :)
        • @Amy - 我链接到文档,希望鼓励使用它并提到时刻。我相信这对于有能力的用户来说已经足够了。
        【解决方案4】:

        在最后一次moment() 调用中,您尝试解析值“2:00:00 PM”。根据文档,在这种情况下您必须使用 String+Format 调用:

        为了获得一致的结果解析除 ISO 8601 字符串之外的任何内容,您应该使用 String + Format。

        当你这样做时:

        var date = moment('2:00:00 PM')
            .add(30, 'seconds')
            .add(2, 'minutes')
            .format('LTS');
        

        date 将是 Invalid date。但是如果你将格式h:mm:ss A 作为第二个参数传递:

        var date = moment('2:00:00 PM', 'h:mm:ss A')
            .add(30, 'seconds')
            .add(2, 'minutes')
            .format('LTS');
        

        ...结果是2:02:30 PM

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-31
          • 1970-01-01
          • 2016-02-19
          • 2016-09-04
          • 2015-12-23
          • 1970-01-01
          • 1970-01-01
          • 2017-08-28
          相关资源
          最近更新 更多