我已經編寫了一些JavaScript來計算兩個日期之間的差異,然後將其等同於特定的值 - 例如'Seconds ago','x days前」 .....計算兩個日期之間傳遞的時間量
我創建了一個小提琴這裏展示我做了什麼:http://jsfiddle.net/meAEe/3/
但是結果總是等於‘0天前’。
任何人都可以幫我找出原因嗎?
我已經編寫了一些JavaScript來計算兩個日期之間的差異,然後將其等同於特定的值 - 例如'Seconds ago','x days前」 .....計算兩個日期之間傳遞的時間量
我創建了一個小提琴這裏展示我做了什麼:http://jsfiddle.net/meAEe/3/
但是結果總是等於‘0天前’。
任何人都可以幫我找出原因嗎?
您需要每個if
語句之間的else
。
現在它將進入每個if
聲明後的第一個匹配。如果時間少於一個小時,它也少於兩小時,少於一天,少於兩天,少於一年。每個人都會替換上一個,所以你只能看到最後一個。
爲什麼不使用插件呢?它們中有很多用JavaScript編寫。這是用jQuery編寫的一個甜蜜的文章。
你在你的代碼中的邏輯錯誤。最後一條if語句將始終執行,因爲您沒有使用else if
連接您的if語句,一旦條件匹配,這會導致程序執行中斷。
您需要將if
s變爲else if
s(當然除了第一個)。現在他們每次都被評估。
除了一些編程細節,你的問題在於使用Math.floor
函數。
據:http://www.w3schools.com/jsref/jsref_floor.asp
Math.floor實際上返回最接近的整數,在這種情況下是0,因爲其結果是0.75。
這是因爲你這樣做:Math.floor(diff/day);
diff/day
的結果是0.75
。如果你把它放下,那就是0
。如果你改變日期,你會發現你的代碼工作得很好。
你的代碼工作正常。如果你看看你的代碼
var rightNow = new Date("Wed, 21 Dec 2011 13:05:09 +0000");
var then = new Date("Tue, 20 Dec 2011 19:05:09 +0000");
差異小於24小時,並給予0天。
我已經把
var then = new Date("Mon, 19 Dec 2011 19:05:09 +0000");
它給予1天前
結果是正確的,但它不是想要的結果。如果差異小於一整天,則應以較低的分辨率顯示,如小時或分鐘。 – Guffa
請張貼的問題在您的代碼。 –