2016-11-20 132 views
0

我試圖用NOW比較數據庫(firebase)的日期。我使用的是moment.js,它不起作用。我認爲它與時區(或UTC + 01:00)有關......如何將時間與時間進行比較

例如。

  • 日期1: 「2016-11-20T14:00:00」
  • NOW: 「2016-11-20T14:49:20 + 01:00」

moment()得到NOW並比較這樣:

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

比較正好是一個小時了......我該如何解決這個問題? AND:在跨時區存儲和比較日期方面是否有任何最佳做法?

+0

請出示瞬間'結果( 「2016-11-20T16:00:00」)格式()'。我猜你的電腦的時區不是'+01:00'。 –

+0

將根據主機時區偏移量解析「2016-11-20T14:00:00」。您應該始終將字符串格式傳遞給解析器,否則只是猜測。 – RobG

回答

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值。

+0

將日期從firebase轉換爲當地時間時起作用: moment.utc(「2016-11-20T14:00:00」)。local()。 – olefrank

1

您無法將您在Firebase中存儲的日期與now()比較,因爲它缺少關於您的時區的信息。

可以使用Firebase.ServerValue.TIMESTAMP

如Store日期:

date1: Firebase.ServerValue.TIMESTAMP

這將由火力地堡數據庫服務器保存在Unix的毫秒時間(自Unix紀元時間,以毫秒爲單位)。

然後,您可以與new Date().getTime()進行比較,這將使您的設備在Unix毫秒中的時間。

例如:

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

希望它能幫助:)

相關問題