【问题标题】:how to convert minutes to hours using moment.js如何使用 moment.js 将分钟转换为小时
【发布时间】:2016-03-16 12:23:55
【问题描述】:

谁能告诉我如何使用 moment.js 将分钟转换为小时并以 hh:mm A 格式显示。

例如, 如果分钟为 480,则应将输出显示为 08:00 AM。 如果分钟是 1080,它应该显示输出为 06:00 PM

【问题讨论】:

  • 这不只是算术吗?
  • 不知道怎么用
  • 分钟并不是一个绝对的日期。这个问题暗示自午夜以来已经过去了几分钟?今天午夜?
  • 如您所知,我们的一天从 00:00 开始,所以早上 8:00 应该是 480 分钟。我不能考虑日期

标签: javascript momentjs


【解决方案1】:

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

moment.utc().startOf('day').add(480, 'minutes').format('hh:mm A')

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

如果您真的想要某一天午夜后的分钟数,包括 DST 转换,请取出 utc 并使用:

moment().startOf('day').add(480, 'minutes').format('hh:mm A')

请注意,接受的答案可能存在 DST 转换问题。例如,如果您在遵守 DST 的美国部分地区:

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

结果与预期不符,根据浏览器的不同,结果会在倒退一小时或前进一小时之间变化。

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

【讨论】:

  • 这应该是公认的答案,因为帖子询问了 moment.js。
【解决方案2】:

你可以像这样做基本的算术:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多