2013-08-02 126 views
6

我需要編寫JavaScript,這將允許我比較兩個ISO時間戳,然後打印出它們之間的差異,例如:「32秒」。比較2 ISO 8601時間戳和輸出秒/分鐘差

以下是我在堆棧溢出中找到的函數,它將普通日期轉換爲ISO格式的日期。所以,這是第一件事,以ISO格式獲取當前時間。

我需要做的下一件事是獲得另一個ISO時間戳來比較它,好吧,我已經存儲在一個對象中。它可以像這樣訪問:marker.timestamp(如下面的代碼所示)。現在我需要比較這兩個時間戳並找出它們之間的差異。如果是60秒,則應該以秒爲單位輸出,如果大於60秒,則應輸出1分鐘和12秒前的時間。

謝謝!

function ISODateString(d){ 
function pad(n){return n<10 ? '0'+n : n} 
return d.getUTCFullYear()+'-' 
     + pad(d.getUTCMonth()+1)+'-' 
     + pad(d.getUTCDate())+'T' 
     + pad(d.getUTCHours())+':' 
     + pad(d.getUTCMinutes())+':' 
     + pad(d.getUTCSeconds())+'Z'} 

var date = new Date(); 
var currentISODateTime = ISODateString(date); 
var ISODateTimeToCompareWith = marker.timestamp; 

// Now how do I compare them? 
+0

所以你想比較'currentISODateTime'和'ISODateTimeToCompareWith',他們都是ISO 8601格式? – federicot

+0

@Campari是的,就是這樣,然後輸出它們之間的差異。他們都是ISO 8601格式。 – jskidd3

回答

17

比較兩個日期很簡單,只要

var differenceInMs = dateNewer - dateOlder; 

因此,轉換時間戳回日期實例

var d1 = new Date('2013-08-02T10:09:08Z'), // 10:09 to 
    d2 = new Date('2013-08-02T10:20:08Z'); // 10:20 is 11 mins 

獲取差異

var diff = d2 - d1; 

格式以此爲所需

if (diff > 60e3) console.log(
    Math.floor(diff/60e3), 'minutes ago' 
); 
else console.log(
    Math.floor(diff/1e3), 'seconds ago' 
); 
// 11 minutes ago 
+0

謝謝。數字之後'e3'是什麼意思? – jskidd3

+4

哦,我明白了,我認爲它只是60k的捷徑。 :P – jskidd3

1

我只是將Date對象存儲爲ISODate類的一部分。您可以在需要顯示字符串時進行字符串轉換,例如使用toString方法。你可以用很簡單的邏輯與日期類的方法來確定差的兩個ISODates之間:

var difference = ISODate.date - ISODateToCompare.date; 
if (difference > 60000) { 
    // display minutes and seconds 
} else { 
    // display seconds 
} 
1

我建議得到時間(秒)從兩個時間戳,就像這樣:

var firstDate = new Date(currentISODateTime), 
    secondDate = new Date(ISODateTimeToCompareWith), 
    firstDateInSeconds = firstDate.getTime() * 1000, 
    secondDateInSeconds = secondDate.getTime() * 1000, 
    difference = Math.abs(firstDateInSeconds - secondDateInSeconds); 

然後用difference工作。例如:

if (difference < 60) { 
    alert(difference + ' seconds'); 
} else if (difference < 3600) { 
    alert(Math.floor(difference/60) + ' minutes'); 
} else { 
    alert(Math.floor(difference/3600) + ' hours'); 
} 

重要:我以前Math.abs的日期在幾秒鐘內進行比較,以獲得它們之間的絕對差異,無論哪個先。

+0

我發現你應該將'(new Date(ISO))。getTime()'除以1000而不是乘以1000來達到以秒爲單位的值。 – eskimwier