javascript - 如何在 Moment 中将数字格式化为时间?

标签 javascript momentjs angular-moment

我正在使用 bs-datepicker用于将时间保存为 mongodb 中的数字。在 mongodb 中,它有 time 字段,其值为 3870000041400000 分别是 16.1517.00 分别。

现在,我想以可读的形式格式化上述时间。我正在使用 moment 2.16。我在这里尝试但无法做到jsfiddle

console.log(moment.unix(38700000).format('HH:mm')) //03:30, expect:16:15
console.log(moment.unix(41400000).format('HH:mm')) //09:30, expect:17:00

以及如何将 HH:mm 转换为数字。例如 18:71 转换成数字

最佳答案

您拥有的数据是自 1970-01-01 00:00:00.000 UTC 以来的毫秒数。

38700000 == 1970-01-01T10:45:00Z
41400000 == 1970-01-01T11:30:00Z

如果您将它们转换为您在评论中提到的时区偏移量 (UTC+05:30),那么值的时间部分将符合您的预期。

38700000 == 1970-01-01T10:45:00Z == 1970-01-01T16:15:00+05:30
41400000 == 1970-01-01T11:30:00Z == 1970-01-01T17:00:00+05:30

你的值根本不对齐,因为你正在使用 moment 的 unix 函数,它期望时间以秒为单位,而不是毫秒(因为 Unix Time 是整秒,除非另有说明)。

此外,如果用户处于不同的时区,则依赖于本地时区,您可能会得到与预期不同的值。

得到你所要求的正确方法是:

moment(38700000).utcOffset("+05:30").format("HH:mm") // "16:15"
moment(41400000).utcOffset("+05:30").format("HH:mm") // "17:00"

请注意,这意味着您的原始数据不是根据 UTC 存储的,而是根据 UTC+05:30 存储的。如果您改为存储基于 UTC 的值会更好,因此您可以:

moment.utc(58500000).format("HH:mm") // "16:15"
moment.utc(61200000).format("HH:mm") // "17:00"

当然,这里真正的问题是您将时间存储到日期时间字段中。可能最好的做法是在您的 MongoDB 数据中根本不使用 Date 类型,而只是存储字符串 "16:15" 或等效数量的整数形式的总分钟数 (60 * 16 + 15 == 975)。

关于javascript - 如何在 Moment 中将数字格式化为时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342278/

相关文章:

javascript - Momentjs : How to prevent "Invalid date"?

javascript - MomentJS 错误输出

javascript - angularjs时刻解析格式

javascript - 将 watchify 与 babelify 一起使用

javascript - Backbone.js URL 路由

javascript - daterangepicker 中的 StartDate 在第二个输入中不起作用

javascript - 在同一个 HTML/Angular 页面上有两个时间选择器

angular - 如何在 Moment js 中设置有效的空日期?

javascript - 如何使用 cql 过滤器过滤地理服务器图层组

javascript - 带有 Rails 3.1 应用程序的初学者问题 : How do I integrate processing. js?