【发布时间】:2020-03-21 09:20:04
【问题描述】:
我有一个时区地图,其中包含本地区域的发布时间,其中的新闻必须使用日期选择器定义何时应在某个日期发布。
这是一条新消息article,初始化如下:
-
{ timeZoneId: 'Europe/Paris, releaseHour: 9, publishingDateTime: undefined }// 9 是 GMT+1 小时
我想知道如何从const now = new Date(),验证这篇文章是否应该
今天或第二天发布,标准是:
-
now在releaseHour之前吗? (巴黎的格林威治标准时间+1 上午 9 点已经过去与否) - 如果是,那么我们应该在 GMT+1 + 1 天上午 9 点提供下一个发布时段
- 如果没有,那么我们应该在当天上午 9 点使用发布时段
这怎么可能?
这就是我尝试过的方法:
import { isBefore, isEqual } from 'date-fns';
import { utcToZonedTime } from 'date-fns-tz';
export const getNextPublishingDateTime = (now, timeZoneId, releaseHour) => {
const zoned = utcToZonedTime(now, timeZoneId);
const releaseTime = new Date(zoned.toISOString());
releaseTime.setHours(releaseHour, 0, 0, 0);
if (isBefore(zoned, releaseTime) || isEqual(zoned, releaseTime)) {
console.log('before');
return releaseTime;
}
releaseTime.setDate(releaseTime.getDate() + 1);
console.log('after');
return releaseTime;
};
但是utcToZonedTime 返回的小时不是 +01:00 偏移量,而是我偏移量的日期。
我尝试了其他一些想法,使用 moment-tz 和 vanilla Date,我发现这个任务有点复杂,希望能在 JS 社区寻求帮助,因为这看起来是一个正常的日期比较。
【问题讨论】:
标签: javascript node.js date momentjs date-nfs