2016-01-25 45 views
0

我試圖獲得兩個GMT日期之間使用時間差的天數GMT兩個日期之間的時間差

但我找不到它。

我在IST(+05:30)和我有一些GMT時間(-05:00)分貝,

我嘗試使用以下命令

temp2.diff(temp1, "days")

這裏所有命令的截圖在控制檯試圖 enter image description here

那裏我們可以清零看到日期是不同的,而且依然在差爲0

這裏是我如何初始化'America/New_York'

var temp1 = moment.tz(new Date('Mon Jan 25 2016 22:00:00 GMT-0600'), 'America/New_York'); 
var temp2 = moment.tz(new Date('Tue Jan 26 2016 00:00:00 GMT-0600'), 'America/New_York'); 

appreaciated任何幫助,感謝的時刻對象。

回答

4

那麼,這些日期之間有不到24小時的差異,所以這是正確的。 documentation說:

默認情況下,moment#diff將返回數字向下舍入。如果你想要浮點數,傳遞true作爲第三個參數。

> temp2.diff(temp1, "days", true) 
0.08333333333333333 

如果你不關心小時可言,它們設置爲0你做的比較

> temp2.hours(0).diff(temp1.hours(0), "days") 
1 
+0

反正是有得到bettween日期區別呢?這裏的日期是不同的我想要輸出爲1 – user555

+1

取浮點數並四捨五入? –

+0

明白了,謝謝。 – user555

1

有幾件事情之前:

  1. 你說你正在從數據庫中檢索這些值,但是你會告訴我們loadi通過Date構造函數從字符串值中獲取它們。如果你真的在你的數據庫中存儲一個字符串,特別是那種特殊的格式,那麼你遇到的問題要比你提出的問題大得多。請準確告訴我們如何從數據庫中加載值。

  2. 您不應該依賴Date對象進行解析,特別是當您已經在使用時刻時,它具有更好的解析例程。

  3. 你說這些值在America/New_York,但是然後你顯示的偏移量爲-0600。這在那個時區從來沒有使用過。您顯示的值的偏移量爲-0500

  4. 你還說過「我有一些GMT日期(-05:00)」 - 這沒有任何意義。 GMT是+00:00。 GMT-0500表示「5小時GMT」後面 GMT「。因此,您不再有「GMT日期」。

  5. 請注意,JavaScript Date對象只能使用使用代碼運行的時區。你不能在任何其他時區運行它。

  6. 儘管Felix在如何使用diff函數顯示小數時是正確的,但您應該認識到diff會讓您在所詢問的兩個時刻之間給出實際所用時間。但是,您似乎想知道時間落在指定時區內的兩天的總日曆天數。要做到這一點,你需要忽略時間部分。使用startOf('day')是一個簡單的方法。試想一下:

    var a = moment.parseZone("2016-01-25T23:00:00-05:00"); 
    var b = moment.parseZone("2016-01-26T01:00:00-05:00"); 
    
    b.diff(a, 'days', true) // 0.08333333333333333 (not what you want) 
    
    b.startOf('day').diff(a.startOf('day'), 'days') // 1 (that's better!) 
    
    moment(b).startOf('day').diff(moment(a).startOf('day'),'days') // 1 (best approach) 
    

    注意,此代碼幾件事情:

    • 在最後一行的代碼是最好的方法,因爲它留下的單獨ab原始值。否則,他們會被修改。 (片刻是可變的)

    • 您似乎已經擁有了正確的本地時間和偏移量,因此不需要使用時區的tz函數。您只能使用parseZone。當然,如果這只是你的例子的一個副作用,那麼你仍然可以使用時區時間,但我強烈建議不要使用Date構造函數。

+0

我以db''start'格式保存了以下格式:「Wed Jan 27 2016 23:00:00 GMT-0500」,',會不會有任何問題?如果我直接使用那個字符串,就像'moment(string)'有一個警告,說'momentjs回落到js date',這就是爲什麼我要創建'Date'對象然後用'moment'解析 – user555

+0

Moment試圖警告你使用該字符串會回退到Date對象進行解析。你已經有效地消除了警告 - 不是它試圖警告你的問題!你使用的是哪個數據庫?總有一種本地類型比字符串更好。 –