我正在尝试比较从数据库(firebase)到现在的日期。我正在使用moment.js,但它不起作用。我认为这与时区(或UTC+01:00)有关.
举例说明。
我现在与moment()
进行比较,如下所示:
var date1 = moment("2016-11-20T14:00:00");
moment(date1).isSameOrAfter( moment() ) // returns true
对比正好是一个小时..。我怎么才能解决这个问题?在跨时区存储和比较日期方面有什么最佳做法吗?
发布于 2016-11-20 14:28:22
日期应始终保存在UTC。如果使用字符串,请键入ISO格式的UTC日期时间值。
因此,在保存从客户端时区转换为UTC和从UTC转换到客户端时区时。
应该对同一时区中的两个日期进行比较。
如果数据库值以UTC为单位,则必须在创建矩对象时解析为.utc()。
moment.utc("2016-11-20T14:00:00");
将当前值更改为UTC,然后再进行比较。
moment.(date1).utc()
或者,您可以将数据库值从UTC更改为本地值。
moment.utc("2016-11-20T14:00:00").local()
保持当前值不变,然后再进行比较。
发布于 2016-11-20 14:42:14
您无法将存储在Firebase中的日期与now()进行比较,因为它缺乏有关您的时区的信息。
您可以使用Firebase.ServerValue.TIMESTAMP
存储日期
例如:
date1: Firebase.ServerValue.TIMESTAMP
这将节省Firebase数据库服务器在Unix毫秒(自Unix时代以来的时间,以毫秒为单位)的时间。
然后,您可以与new Date().getTime()
进行比较,这将给您的设备时间(以Unix毫秒为单位)。
例如:
if(new Date().getTime() >= date1) {
//do something
}
希望它有帮助:)
https://stackoverflow.com/questions/40704910
复制相似问题