gpt4 book ai didi

javascript - 我从 Ruby 到 JavaScript 的翻译给出了不同的结果

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:39 26 4
gpt4 key购买 nike

我正在编写一个函数,该函数接受 future 日期并返回 "X weeks, Y days, Z hours" 形式的字符串,表示该日期的倒计时。我的做法是:

  1. 通过从今天的纪元时间中减去 future 日期的纪元时间,得到分隔两个日期的秒数。
  2. 将秒数除以 604800(一周中的秒数)。将结果存储为 weeks,并将 seconds 重新定义为余数(这是 Ruby 的 divmod 所做的)。
  3. 小时分钟执行相同的操作。

首先我用 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 只使用 float 。
  • 我将纪元时间除以 1,000,因为 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 周,5 天,21 小时”,Ruby 给出 “2 周,3 天,6 小时”。我无法弄清楚这种差异是从哪里产生的。有人可以指出我的错误吗?

最佳答案

Yet if I feed the date 2015,6,19 to both functions, it being June 1st as I write this, JS tells me 6 weeks, 5 days, 21 hours and Ruby tells me 2 wweeks, 3 days, 6 hours.

你还没有展示你是怎么做到的,但我猜你在做:

timeCountdown(new Date(2015, 6, 19));

...但是在 JavaScript 中,月份数字以 0 而不是 1 开头,所以 6 月是第 5 个月,而不是第 6 个月:

timeCountdown(new Date(2015, 5, 19));
// --------------------------^

示例:

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.";
}
snippet.log("July 19th: " + timeCountdown(new Date(2015, 6, 19)));
snippet.log("June 19th: " + timeCountdown(new Date(2015, 5, 19)));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于javascript - 我从 Ruby 到 JavaScript 的翻译给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com