Javascript 如何将数字格式化为时刻中的时间?

Javascript 如何将数字格式化为时刻中的时间?,javascript,momentjs,angular-moment,Javascript,Momentjs,Angular Moment,我正在使用mongodb中的save time as number。在mongodb中,它有time字段,其值为3870000和41400000,分别为16.15和17.00 现在,我想以可读的形式格式化上面的时间。我正在使用矩2.16。在这里我试过了,但做不到 以及如何从HH:mm转换为数字。e、 g18:71转换为数字自1970-01-01 00:00:00.000 UTC以来,您拥有的数据以毫秒为单位 38700000 == 1970-01-01T10:45:00Z 41400000 ==

我正在使用mongodb中的save time as number。在mongodb中,它有time字段,其值为
3870000
41400000
,分别为
16.15
17.00

现在,我想以可读的形式格式化上面的时间。我正在使用
矩2.16
。在这里我试过了,但做不到


以及如何从HH:mm转换为数字。e、 g
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
您的值根本不对齐,因为您使用的是矩的
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"

当然,这里真正的问题是将一天中的时间存储到日期时间字段中。最好不要在MongoDB数据中使用日期类型,而只存储字符串“16:15”或等效的总分钟数作为整数(60*16+15==975)。

当我运行
console.log(矩(3870000.format('HH:mm')&
console.log(矩(41400000).format('HH:mm')我分别得到10:45和11:30的值。这两个时间距离您的目标值都有5:30分钟,因此我会确保您的时区是正确的(最好使用UTC+0)。您可以将
x
作为格式参数传递,以从日期获取unix时间戳。我还想指出那个时刻。unix(t)以秒为单位获取unix时间戳,而矩(t)以毫秒为单位获取unix时间戳。@SamJudge,谢谢您的回复。我的时区是+5:30 GMT,那么,如何实现它呢?很简单,在.format()之前使用.local()
console.log(矩(3870000).local().format('HH:mm'))
:)我看到您在使用mongo,所以可能发生的是您正在以本地时间格式上载,mongo将其存储为UTC,当您期望本地时间时,您将返回UTC值。做上述工作应该是可行的。谢谢你给我举个简单的例子。最后一段很棒,这是个好方法。
moment.utc(58500000).format("HH:mm") // "16:15"
moment.utc(61200000).format("HH:mm") // "17:00"