在momentjs中将日期时间添加到日期时间

时间:2017-02-03 19:45:35

标签: javascript datetime momentjs

我需要将变量secondsToMinutes添加到startdate

secondsToMinutes是" 3:20" startDate ="下午2:00" endDate应该等于" 2:03:20 PM"。 我已经尝试了很多方法并且每次都会出错。

   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');

日期显示为无效日期。

4 个答案:

答案 0 :(得分:9)

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

例如:字符串Jan 1, 2017中的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"

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

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

答案 1 :(得分:3)

时刻有很好的文档。我会查看它: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')

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

答案 2 :(得分:0)

在上一次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

答案 3 :(得分:0)

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

dayjs.add(1, 'day')

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