Moment js不会在特定时间添加小时和分钟

Moment js not adding hours and minutes to a specific time

我有一个开始时间,我想为其添加一个结束时间。 例如

startTime=19:09
endTime=00:51 // 0 hours and 51 minutes

我想将 51 分钟添加到 19:09 使其成为 20:00。

我已经尝试了多种不同的场景,如下图所示,但没有给我正确的时间

我试过了

let [hour, minute] = endTime.split(':').map(Number);
this.endTime = Moment(startTime)).add({ hour: 'hours', minute: 'minutes' }) // also tried .add(hour,'hours').add(minute,'minutes')

仍然输出 19:09。它只是无视我的结束时间

我试过了

Moment(endTime, 'hh:mm').add(Moment.duration(startTime)).format("hh:mm");

当它应该是 20:00

时,它给了我 08:00 的输出

我做错了什么? 我想将结束时间添加到开始时间。 请记住,我的 endTime 总是在变化,所以有时它可能是 13:05 等导致它的用户输入

您需要将持续时间转换为一个单位,如 minutessecondsdays 等... 然后您可以使用以下代码段来添加持续时间。

you can uses moment methods to convert your duration

const mins = moment.duration(10, "hour").asMinutes();

const someTime = moment('19:09',"HH:mm");

const data = someTime.add('51','minutes').format("HH:mm")

//More clever solution would be
const data2 = someTime.add(1, "hours").add(51, "minutes").format("HH:mm")
console.log(data)
console.log(data2)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

您的代码存在三个主要问题:

  1. 像您一样单独使用时间戳创建时刻(即类似 moment('19:09') 没有日期)已被弃用并引发错误。您要么必须以 RFC2822 或 ISO 格式传递完全指定的时间戳,要么明确告诉库您正在使用什么输入格式。

  2. 您传递给 add() 函数的对象实际上是

    {
      hour: "hours", 
      minute: "minutes"
    }
    

    也就是说,不要传递小时和分钟的数值来添加到您的 此刻,您正在传递字符串 "hours""minutes",这显然 momentsjs 无法处理。

  3. 格式 hh:mm 只接受从 012 的小时数。如果你想要 24 小时制,你必须使用 HH:mm

考虑到这些问题,以下代码段按预期工作:

let start = '2021-01-07 19:09', 
    duration = '0:51', 
    starttime = '19:09';

let [hour, minute] = duration.split(":");

//shorthand initialization for the argument
let endtime1 = moment(start).add({hour, minute}).toString(); 

//explicit definition of property names
let endtime2 = moment(start).add({hours: hour, minutes: minute}).toString(); 

//add hours and minutes separately
let endtime3 = moment(start).add(hour, "hours").add(minute, "minutes").toString(); 

//provide a format for the timestamp. momentsjs will take the current date for the date value
let endtime4 = moment(starttime, "HH:mm").add(hour, "hours").add(minute, "minutes").toString();

console.log(endtime1);
console.log(endtime2);
console.log(endtime3);
console.log(endtime4);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

另外请记住,为了指定要操作时间戳的哪一部分,您可以使用单数或复数措辞。即

moment(...).add(4, "hour").add(17, "minute")moment(...).add({hour: 4, minute: 17})

等同于

moment(...).add(4, "hours").add(17, "minutes")moment(...).add({hours: 4, minutes: 17})

分别在创建 endtime1endtime2

的片段中也可以看出