我正在寫一個接受未來日期的函數,並以表示該日期的倒計時形式"X weeks, Y days, Z hours"
返回一個字符串。我的方法是:我從Ruby到JavaScript的翻譯給出了不同的結果
- 通過從今天的紀元時間減去未來日期的紀元時間來獲得隔開兩個日期的秒數。
- 將秒數除以604800(一週內的秒數)。將結果存儲爲
weeks
,並重新定義seconds
作爲餘數(這是Ruby的divmod
所做的)。 - 對
days
,hours
和minutes
做同樣的事情。
首先,我寫在Ruby中,它的工作原理:
def time_countdown(*date_string)
seconds = Time.new(*date_string).to_i - Time.now.to_i
weeks, seconds = seconds.divmod 604800
days, seconds = seconds.divmod 86400
hours, seconds = seconds.divmod 3600
minutes, seconds = seconds.divmod 60
return "#{weeks} weeks, #{days} days, #{hours} hours."
end
我翻譯這JavaScript和除下列相同的方法:
- 由於JavaScript的缺乏
divmod
,我做手動設置weeks
/days
/hours
,然後將seconds
設置爲其餘。 - 我需要使用
Math.floor
,因爲JavaScript專門使用浮動。 - 我將紀元時間除以1000,因爲JS使用毫秒爲其曆元時間戳,與Ruby不同。
- 我的JS函數期望接收一個epochTime整數,因爲我還沒有學會如何在JS中傳遞任意長度的參數列表。
的代碼是:
function timeCountdown(epochTime) {
var seconds = epochTime/1000 - new Date().getTime()/1000;
var weeks = Math.floor(seconds/604800);
seconds = seconds % 604800;
var days = Math.floor(seconds/86400);
seconds = seconds % 86400;
var hours = Math.floor(seconds/3600);
seconds = seconds % 3600;
return weeks + " weeks, " + days + " days, " + hours + " hours.";
}
對於日期2015,6,19
,截至6月1日,JS給"6 weeks, 5 days, 21 hours"
和Ruby給"2 weeks, 3 days, 6 hours"
。我無法弄清楚這種差異在哪裏出現。有人能指出我的錯誤嗎?
調試器不能指出你的錯誤嗎? –