Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较日期和时间_Javascript_Date_Momentjs - Fatal编程技术网

Javascript 如何比较日期和时间

Javascript 如何比较日期和时间,javascript,date,momentjs,Javascript,Date,Momentjs,我试图将数据库(firebase)中的日期与现在进行比较。我正在使用moment.js,但它不起作用。我认为这与时区(或UTC+01:00)有关 例如 日期1:“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() ) // retur

我试图将数据库(firebase)中的日期与现在进行比较。我正在使用moment.js,但它不起作用。我认为这与时区(或UTC+01:00)有关

例如

  • 日期1:“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

比较正好是一个小时后。。。我怎样才能解决这个问题?还有:在跨时区存储和比较日期方面是否有最佳做法。

日期应始终以UTC格式保存。如果使用字符串,请以ISO格式键入UTC日期时间值

因此,在保存从客户机时区转换为UTC时,以及在检索从UTC转换为客户机时区时

应在同一时区的两个日期之间进行比较

如果数据库值以UTC为单位,则在创建矩对象时必须解析为.UTC()

moment.utc("2016-11-20T14:00:00");
比较之前,将NOW值更改为UTC

moment.(date1).utc()
或者,您可以将数据库值从UTC更改为local

 moment.utc("2016-11-20T14:00:00").local()

保持比较前的NOW值不变。

日期应始终以UTC格式保存。如果使用字符串,请以ISO格式键入UTC日期时间值

moment.(date1).utc()
因此,在保存从客户机时区转换为UTC时,以及在检索从UTC转换为客户机时区时

应在同一时区的两个日期之间进行比较

如果数据库值以UTC为单位,则在创建矩对象时必须解析为.UTC()

moment.utc("2016-11-20T14:00:00");
比较之前,将NOW值更改为UTC

moment.(date1).utc()
或者,您可以将数据库值从UTC更改为local

 moment.utc("2016-11-20T14:00:00").local()

保持比较前的NOW值不变。

您无法将存储在Firebase中的日期与NOW()进行比较,因为它缺少有关时区的信息

moment.(date1).utc()
您可以使用

例如:

if(new Date().getTime() >= date1) {
    //do something
}
date1:Firebase.ServerValue.TIMESTAMP

这将通过Firebase数据库服务器以Unix毫秒为单位(自Unix纪元以来的时间,以毫秒为单位)节省您的时间

然后您可以与
new Date().getTime()
进行比较,这将为您的设备提供以Unix毫秒为单位的时间

例如:

if(new Date().getTime() >= date1) {
    //do something
}

希望有帮助:)

您无法将存储在Firebase中的日期与now()进行比较,因为它缺少有关您时区的信息

您可以使用

例如:

if(new Date().getTime() >= date1) {
    //do something
}
date1:Firebase.ServerValue.TIMESTAMP

这将通过Firebase数据库服务器以Unix毫秒为单位(自Unix纪元以来的时间,以毫秒为单位)节省您的时间

然后您可以与
new Date().getTime()
进行比较,这将为您的设备提供以Unix毫秒为单位的时间

例如:

if(new Date().getTime() >= date1) {
    //do something
}

希望有帮助:)

请显示
时刻(“2016-11-20T16:00:00”)的结果。format()
。我猜您电脑的时区不是
+01:00
“2016-11-20T14:00:00”将根据主机时区偏移量进行解析。您应该始终将字符串格式传递给解析器,否则这只是猜测。请显示
时刻(“2016-11-20T16:00:00”)的结果。format()
。我猜您电脑的时区不是
+01:00
“2016-11-20T14:00:00”将根据主机时区偏移量进行解析。您应该始终将字符串格式传递给解析器,否则这只是猜测。它在将日期从firebase转换为本地时间时起作用:矩.utc(“2016-11-20T14:00:00”).local()。它在将日期从firebase转换为本地时间时起作用:矩.utc(“2016-11-20T14:00:00”).local()。