gpt4 book ai didi

javascript - 在javascript中获取下一次出现的日期和时间

转载 作者:数据小太阳 更新时间:2023-10-29 05:38:20 24 4
gpt4 key购买 nike

我正在尝试在未来的特定时间点实现倒数计时器。该时间点始终是一周中的同一天和同一小时,并且基于 UTC 时间。

我正在尝试编写一个通用函数,给定一周中的某一天和一个小时,它将在未来返回一个代表该条件的日期对象。

例子:

getNextOccuranceOfUTCDayAndHour(1, 7);

获取周一早上 7 点的下一次出现。如果今天是 2015 年 5 月 25 日星期一午夜 UTC,则此函数应返回一个 Date 对象,表示 UTC 时间 6/1/2015 星期一早上 7 点。

getNextOccuranceOfUTCDayAndHour(3, 13);

获取下一次星期三下午 1 点。如果今天是星期二,2015 年 5 月 26 日午夜 UTC,那么这个函数应该返回一个 Date 对象,表示星期三 5/27/2015 下午 1 点 UTC。

我试图编写一个函数来执行此操作,并且包含了下面的代码片段,但它似乎只适用于某些日期,而不适用于其他日期。这是难以置信的不可靠。我不想使用 Moment.js。

function getNextOccuranceOfUTCDayAndHour(day, hour) {
d = new Date();
d.setDate(d.getUTCDate() + (7 + day - d.getUTCDay()) % 7)
d.setUTCHours(hour, 0, 0, 0);
return d;
}

function format_seconds(t) {
var d = Math.floor(t / 86400);
var h = Math.floor(t % 86400 / 3600);
var m = Math.floor(t % 3600 / 60);
var s = Math.floor(t % 3600 % 60);
return ((d > 0 ? d + " d. " : "") +
(h > 0 ? h + " h. " : "") +
(m > 0 ? m + " m. " : "") +
s + " s.");
}

function update() {
var next_occurance = getNextOccuranceOfUTCDayAndHour(1, 7);
$('#next_occurance').text(next_occurance);
var ms = next_occurance - new Date();
$('#countdown').text(format_seconds(Math.floor(ms / 1000)));
}

$(function() {
update();
setInterval(update, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="next_occurance">Next Occurance</p>
<p id="countdown">Countdown</p>

编辑:预期值与返回值的一些示例。 JSFiddle

最佳答案

原始代码中的问题是使用 d.setDate(); 而不是 d.setUTCDate();。此外,如果当前日期与目标日期是一周中的同一天,则结果不正确。只需添加一个 if 语句来检查这种情况即可解决该问题。

更新的 JSFiddle:https://jsfiddle.net/2j49q0ak/1

关于javascript - 在javascript中获取下一次出现的日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448613/

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