您拥有的数据是自 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 时间以整秒为单位)。
此外,通过依赖本地时区,如果用户在不同的时区,您可能会得到与预期不同的值。
得到你要求的正确方法是:
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"
当然,这里真正的问题是您将时间存储到日期时间字段中。最好的办法可能是Date
在 MongoDB 数据中根本不使用该类型,而只是将字符串"16:15"
或等效的总分钟数存储为整数(60 * 16 + 15 == 975)。