如何使用moment.js将分钟转换为小时

use*_*130 8 javascript momentjs

任何人都可以告诉我如何使用moment.js将分钟转换为小时,并以hh:mm A格式显示.

例如,如果分钟为480,则应显示输出为08:00 AM.如果分钟为1080,则应显示输出为06:00 PM

Mag*_*int 25

假设您总是希望从午夜开始添加分钟,最简单的方法是:

moment.utc().startOf('day').add(480, 'minutes').format('hh:mm A')
Run Code Online (Sandbox Code Playgroud)

UTC的使用避免了夏令时转换的问题,这会导致时间根据相关日期而变化.

如果你真的想要在给定的一天午夜之后的分钟数,包括DST转换取出utc并使用:

moment().startOf('day').add(480, 'minutes').format('hh:mm A')
Run Code Online (Sandbox Code Playgroud)

请注意,接受的答案可能存在DST过渡问题.例如,如果您在美国的一部分观察DST:

moment('2016-03-13').hours(2).minutes(30).format('hh:mm A')
"03:30 AM"
Run Code Online (Sandbox Code Playgroud)

结果与预期不符,并且根据浏览器的不同,在返回和小时之间或前进一小时之间会有所不同.

编辑:原始答案已更新以修复错误.作为一个额外的评论,我会非常怀疑任何试图将一些分钟映射到民用时间的代码.底线是,当天480分钟并不总是上午8点.在您的问题的背景下考虑这一点.DST错误现在很可能.

  • 这应该是公认的答案,因为该帖子询问了 moment.js。 (2认同)

use*_*097 12

您可以像这样执行基本算术:

function getTimeFromMins(mins) {
    // do not include the first validation check if you want, for example,
    // getTimeFromMins(1530) to equal getTimeFromMins(90) (i.e. mins rollover)
    if (mins >= 24 * 60 || mins < 0) {
        throw new RangeError("Valid input should be greater than or equal to 0 and less than 1440.");
    }
    var h = mins / 60 | 0,
        m = mins % 60 | 0;
    return moment.utc().hours(h).minutes(m).format("hh:mm A");
}


getTimeFromMins(480); // returns "08:00 AM"
getTimeFromMins(520); // returns "08:40 AM"
getTimeFromMins(1080); // returns "06:00 PM"
Run Code Online (Sandbox Code Playgroud)