1

我正在尝试修改脚本以每 5 分钟运行一次倒计时。目前,getCountDown() 函数设置为每 12 小时倒计时一次。我似乎无法弄清楚如何修改此时间格式以每 5 分钟倒计时一次。我需要更改的功能在这里

function getCountDown() {
var until = getGMT();
until.setHours(until.getHours() < 12 ? 12 : 24, 0, 0, 0); // Next midday or midnight
return until;

function getGMT() {
var now = new Date();
now.setMinutes(now.getMinutes() + now.getTimezoneOffset() - 0 * 60); // GMT is UTC-0
return now;

}

我的 js 技能非常有限,因此非常感谢任何帮助。

4

1 回答 1

1

注意:这个答案是为了引导发帖者找到解决方案和更好地理解JS,而不是给出解决方案。

当前代码的工作方式是首先获取一个日期对象,然后将该对象的时间设置为 24:00(下一个午夜)或 12:00(下一个中午)。它通过检查时间的当前小时值来解决这个问题(<12 表示接下来是中午,接下来是午夜)。然后它返回新修改的日期对象,显示我认为倒计时设计运行到的日期。

所以问题的核心是你需要返回一个不同的日期对象,这意味着你想将分钟设置为你选择的东西(秒和毫秒设置为 0)。

对于您想要做的事情,您可能希望使用 Date 对象上的 getMinutes 和 setMinutes 函数来检查当前日期,然后设置适当的分钟(以及秒和毫秒值)。当然,如果您的当前时间是 01:59,那么您可能需要更改小时以提供 02:00,因此您实际上可能仍想使用 setHours(因为这确实允许您设置小时和分钟)。

计算出你的新分钟值是你可以做的事情。您只需要四舍五入到最接近的 5,并适当处理上述情况,您需要四舍五入到一个小时。

可以在 msdn 站点上找到有关上述方法的文档:

编辑以添加一些代码

var hours = until.getHours();
var minutes = until.getMinutes();
var targetMinutes = Math.ceil((minutes+1)/5)*5;
if (targetMinutes==60)
{
    targetMinutes = 0;
    hours = hours+1;
}

until.setHours(hours, targetMinutes, 0, 0);

您可能能够更有效地编写上述内容,并且您可能还需要检查它在午夜等边界周围的作用(它似乎有效,但您应该始终彻底测试代码)。希望你能明白它在做什么。:)

于 2012-07-16T16:57:22.910 回答