我使用bs-datepicker将节省时间用作mongodb中的数字。在mongodb中,它具有时间字段,其值为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
转换为数字
答案 0 :(得分:2)
您拥有的数据是自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
函数,该函数需要以秒为单位的时间,而不是毫秒(因为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)。