我试图将数据库(firebase)中的日期与NOW进行比较。我使用的是moment.js而且它无法正常工作。我认为它与时区(或UTC + 01:00)有关......
实施例
我现在得到moment()
,并按照以下方式进行比较:
var date1 = moment("2016-11-20T14:00:00");
moment(date1).isSameOrAfter( moment() ) // returns true
比较正好一小时......我该如何解决这个问题? AND:在各个时区存储和比较日期方面是否有最佳做法。
答案 0 :(得分:1)
日期应始终以UTC格式保存。如果您使用字符串类型ISO格式的UTC日期时间值。
因此,在将转换从客户端时区保存到UTC并同时检索从UTC转换为客户端时区时。
应在同一时区的两个日期之间进行比较。
如果数据库值是UTC,那么在创建时刻对象时必须解析为.utc()。
moment.utc("2016-11-20T14:00:00");
在比较之前将NOW值更改为UTC。
moment.(date1).utc()
或者,您可以将数据库值从UTC更改为本地。
moment.utc("2016-11-20T14:00:00").local()
在比较之前保持现在的NOW值。
答案 1 :(得分:1)
您无法将存储在Firebase中的日期与now()进行比较,因为它缺少有关您的时区的信息。
您可以使用Firebase.ServerValue.TIMESTAMP
例如:
date1: Firebase.ServerValue.TIMESTAMP
Firebase数据库服务器将以Unix毫秒(自Unix纪元以来的时间,以毫秒为单位)节省您的时间。
然后您可以与new Date().getTime()
进行比较,这将以Unix毫秒为单位提供设备时间。
例如:
if(new Date().getTime() >= date1) {
//do something
}
希望有所帮助:)