我正在写一个接受未来日期的函数,并以表示该日期的倒计时形式"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"
。我无法弄清楚这种差异在哪里出现。有人能指出我的错误吗?
调试器不能指出你的错误吗? –