如何在 Moment 中将数字格式化为时间?
How to format number as time in Moment?
我正在使用 bs-datepicker 将时间保存为 mongodb 中的数字。在 mongodb 中,它有 time 字段,其值即 38700000
和 41400000
分别为 16.15
和 17.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 年 1 月 1 日以来的毫秒数 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-based 值会更好,所以你会这样做:
moment.utc(58500000).format("HH:mm") // "16:15"
moment.utc(61200000).format("HH:mm") // "17:00"
当然,这里真正的问题是您将 time-of-day 存储到 date-time 字段中。可能最好的做法是根本不在 MongoDB 数据中使用 Date
类型,而只是将字符串 "16:15"
或等效的总分钟数存储为整数( 60 * 16 + 15 == 975).
我正在使用 bs-datepicker 将时间保存为 mongodb 中的数字。在 mongodb 中,它有 time 字段,其值即 38700000
和 41400000
分别为 16.15
和 17.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 年 1 月 1 日以来的毫秒数 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-based 值会更好,所以你会这样做:
moment.utc(58500000).format("HH:mm") // "16:15"
moment.utc(61200000).format("HH:mm") // "17:00"
当然,这里真正的问题是您将 time-of-day 存储到 date-time 字段中。可能最好的做法是根本不在 MongoDB 数据中使用 Date
类型,而只是将字符串 "16:15"
或等效的总分钟数存储为整数( 60 * 16 + 15 == 975).