Date-fns:获取特定日期或特定UTC时间的倒计时
Date-fns: Get Countdown to a specific UTC time on a specific day or date
我正在使用 date-fns
库。我有一个特定的要求。
假设我在 UTC 每周六早上 7 点有一个活动。
如果活动还剩24小时,我想说'Coming Soon'。如果还剩 24 小时以上,我想显示以下周六早上 7 点 UTC 为目标的日历日。
一旦过了星期六早上 7 点 UTC,它应该显示到下星期六早上 7 点 UTC 的剩余日历天数。
我不确定如何才能做到这一点。
如果是查星期六,不考虑时间,我可以用isSaturday()
,但不是这样,我需要定位到下星期六(UTC 早上 7 点)的具体 UTC 时间。
更新:我面临的主要问题是将目标定义为下周六早上 7 点 UTC。定义目标后,我可以使用 differenceInCalendarDays()
来计算剩余天数。
你能帮忙吗?
不使用 date-fns
回答“主要问题”非常简单 - 使用 date-fns
可能 更简单 但我不知道 date-fns
- 所以这里是普通的 ol' javascript Date
对象解决方案
function nextSaturday(d = new Date) {
const next = new Date(d);
next.setUTCDate(next.getUTCDate() + (7 - (next.getUTCDay() + 1)) % 7);
next.setUTCHours(7, 0, 0, 0);
if (next <= d) { // if it's currently saturday after 7AM UTC, add 7 days
next.setUTCDate(next.getUTCDate() + 7);
}
return next;
}
console.log(nextSaturday(new Date).toUTCString());
// for future readers
// Saturday March 5th 2022 is a Satruday
// at 06:59:59.999 - next should be Sat, 05 Mar 2022 07:00:00 GMT
console.log(nextSaturday(new Date('2022-03-05T06:59:59.999Z')).toUTCString());
// at 07:00:00 - next should be Sat, 05 Mar 2022 07:00:00 GMT
console.log(nextSaturday(new Date('2022-03-05T07:00:00.000Z')).toUTCString());
console.log(nextSaturday(new Date('2022-05-15T07:00:00.000Z')).toUTCString());
创建函数,以便在不带参数的情况下调用 nextSaturday
将使用当前日期 - 但如果您传入一个日期,它将使用该日期 - 这只是为了验证它是否有效
我正在使用 date-fns
库。我有一个特定的要求。
假设我在 UTC 每周六早上 7 点有一个活动。
如果活动还剩24小时,我想说'Coming Soon'。如果还剩 24 小时以上,我想显示以下周六早上 7 点 UTC 为目标的日历日。
一旦过了星期六早上 7 点 UTC,它应该显示到下星期六早上 7 点 UTC 的剩余日历天数。
我不确定如何才能做到这一点。
如果是查星期六,不考虑时间,我可以用isSaturday()
,但不是这样,我需要定位到下星期六(UTC 早上 7 点)的具体 UTC 时间。
更新:我面临的主要问题是将目标定义为下周六早上 7 点 UTC。定义目标后,我可以使用 differenceInCalendarDays()
来计算剩余天数。
你能帮忙吗?
不使用 date-fns
回答“主要问题”非常简单 - 使用 date-fns
可能 更简单 但我不知道 date-fns
- 所以这里是普通的 ol' javascript Date
对象解决方案
function nextSaturday(d = new Date) {
const next = new Date(d);
next.setUTCDate(next.getUTCDate() + (7 - (next.getUTCDay() + 1)) % 7);
next.setUTCHours(7, 0, 0, 0);
if (next <= d) { // if it's currently saturday after 7AM UTC, add 7 days
next.setUTCDate(next.getUTCDate() + 7);
}
return next;
}
console.log(nextSaturday(new Date).toUTCString());
// for future readers
// Saturday March 5th 2022 is a Satruday
// at 06:59:59.999 - next should be Sat, 05 Mar 2022 07:00:00 GMT
console.log(nextSaturday(new Date('2022-03-05T06:59:59.999Z')).toUTCString());
// at 07:00:00 - next should be Sat, 05 Mar 2022 07:00:00 GMT
console.log(nextSaturday(new Date('2022-03-05T07:00:00.000Z')).toUTCString());
console.log(nextSaturday(new Date('2022-05-15T07:00:00.000Z')).toUTCString());
创建函数,以便在不带参数的情况下调用 nextSaturday
将使用当前日期 - 但如果您传入一个日期,它将使用该日期 - 这只是为了验证它是否有效