如何比较日期与时刻

时间:2016-11-20 14:00:32

标签: javascript date momentjs

我试图将数据库(firebase)中的日期与NOW进行比较。我使用的是moment.js而且它无法正常工作。我认为它与时区(或UTC + 01:00)有关......

实施例

  • date1:​​" 2016-11-20T14:00:00"
  • 现在:" 2016-11-20T14:49:20 + 01:00"

我现在得到moment(),并按照以下方式进行比较:

var date1 = moment("2016-11-20T14:00:00");
moment(date1).isSameOrAfter( moment() ) // returns true

比较正好一小时......我该如何解决这个问题? AND:在各个时区存储和比较日期方面是否有最佳做法。

2 个答案:

答案 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
}

希望有所帮助:)