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 等导致它的用户输入
您需要将持续时间转换为一个单位,如 minutes
、seconds
、days
等...
然后您可以使用以下代码段来添加持续时间。
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>
您的代码存在三个主要问题:
像您一样单独使用时间戳创建时刻(即类似 moment('19:09')
没有日期)已被弃用并引发错误。您要么必须以 RFC2822 或 ISO 格式传递完全指定的时间戳,要么明确告诉库您正在使用什么输入格式。
您传递给 add()
函数的对象实际上是
{
hour: "hours",
minute: "minutes"
}
也就是说,不要传递小时和分钟的数值来添加到您的
此刻,您正在传递字符串 "hours"
和 "minutes"
,这显然
momentsjs 无法处理。
格式 hh:mm
只接受从 0
到 12
的小时数。如果你想要 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})
分别在创建 endtime1
和 endtime2
的片段中也可以看出
我有一个开始时间,我想为其添加一个结束时间。 例如
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 等导致它的用户输入
您需要将持续时间转换为一个单位,如 minutes
、seconds
、days
等...
然后您可以使用以下代码段来添加持续时间。
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>
您的代码存在三个主要问题:
像您一样单独使用时间戳创建时刻(即类似
moment('19:09')
没有日期)已被弃用并引发错误。您要么必须以 RFC2822 或 ISO 格式传递完全指定的时间戳,要么明确告诉库您正在使用什么输入格式。您传递给
add()
函数的对象实际上是{ hour: "hours", minute: "minutes" }
也就是说,不要传递小时和分钟的数值来添加到您的 此刻,您正在传递字符串
"hours"
和"minutes"
,这显然 momentsjs 无法处理。格式
hh:mm
只接受从0
到12
的小时数。如果你想要 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})
分别在创建 endtime1
和 endtime2