Date-fns:获取特定日期或特定UTC时间的倒计时

Date-fns: Get Countdown to a specific UTC time on a specific day or date

我正在使用 date-fns 库。我有一个特定的要求。

假设我在 UTC 每周六早上 7 点有一个活动。

  1. 如果活动还剩24小时,我想说'Coming Soon'。如果还剩 24 小时以上,我想显示以下周六早上 7 点 UTC 为目标的日历日。

  2. 一旦过了星期六早上 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 将使用当前日期 - 但如果您传入一个日期,它将使用该日期 - 这只是为了验证它是否有效