【问题标题】:Moment js not adding hours and minutes to a specific timeMoment js不会将小时和分钟添加到特定时间
【发布时间】:2021-01-07 19:03:12
【问题描述】:

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

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

这给了我 08:00 的输出,而它应该是 20:00

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

【问题讨论】:

  • 尝试 .format("HH:mm") 大写 HH 代表 00-23 而不是 hh 代表 00-12

标签: javascript typescript momentjs


【解决方案1】:

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

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

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

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

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

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

考虑到这些问题,以下 sn-p 按预期工作:

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})

分别也可以在 sn-p 中看到 endtime1endtime2 的创建

【讨论】:

  • 非常感谢!!这让我发疯了。它现在工作
【解决方案2】:

您需要将持续时间转换为单个单位,如minutessecondsdays 等... 然后就可以使用下面的sn-p来添加duration了。

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2017-03-28
    相关资源
    最近更新 更多