我正在製作一個JavaScript計數器,計數'秒前'。我有我的時間在一個JS時間對象,並且我在堆棧溢出發現了一個「時間差異」函數代碼片段,但它顯示「2小時前」。我怎樣才能讓它顯示「5小時10分37秒前」。Javascript模糊時間(例如,'10分鐘前')精確秒數
這裏就是我的工作:
該函數將當前時間和事物的時間戳轉換成「進行20秒前」,而不是一個神祕的日期:
function timeDifference(current, previous) {
var msPerMinute = 60 * 1000;
var msPerHour = msPerMinute * 60;
var msPerDay = msPerHour * 24;
var msPerMonth = msPerDay * 30;
var msPerYear = msPerDay * 365;
var elapsed = current - previous;
if (elapsed < msPerMinute) {
return Math.round(elapsed/1000) + ' seconds ago';
} else if (elapsed < msPerHour) {
return Math.round(elapsed/msPerMinute) + ' minutes ago';
} else if (elapsed < msPerDay) {
return Math.round(elapsed/msPerHour) + ' hours ago';
} else if (elapsed < msPerMonth) {
return 'approximately ' + Math.round(elapsed/msPerDay) + ' days ago';
} else if (elapsed < msPerYear) {
return 'approximately ' + Math.round(elapsed/msPerMonth) + ' months ago';
} else {
return 'approximately ' + Math.round(elapsed/msPerYear) + ' years ago';
}
}
這裏就是我每秒用於「計數」時間。我想它說「10小時,3分鐘,10秒前」,然後在1秒鐘之後,「5小時,3分鐘,11秒前」
var newTime = new Date(data.popular[i].timestamp*1000)
var relTime = timeDifference(new Date(),newTime)
setInterval(function(){
var theTimeEl = $('.timestamp-large').filter(function(){
return $(this).html() == relTime
});
newTime.setSeconds(newTime.getSeconds() + 1);
var relTime = timeDifference(new Date(), newTime);
$(theTimeEl).html(relTime);
console.log(relTime)
}, 1000)
可變NEWTIME是時間在UTC javascript日期格式。 relTime是以「秒前」格式。間隔循環通過一堆時間戳記元素,併爲每個時間戳選取正確的一個。然後它增加一秒的時間,將其轉換回「模糊時間」(幾秒前),用新時間替換html並將其記錄在控制檯中。
如何將「5小時前」更改爲「5小時37分鐘10秒前」?時差功能需要修改。
爲什麼你要在setInterval內重新聲明'var relTime'? – ErikE 2012-07-13 22:42:08
P.S.我會用一種非常不同的方法來找到正確的html項目。必須有一個數據 - [東西]標籤,您可以添加到每個可以將正確的時間戳與正確的html相關聯。 – ErikE 2012-07-14 02:55:16
@ErikE我必須再次聲明relTime,否則它將始終具有初始值。以及如何使用.attr('datasomething')比.html()更好? – alt 2012-07-14 17:53:45