Javascript 从'const now=new Date()`,如何验证我在给定时区和小时的特定日期之前或之前?
我有一个时区地图,在本地区域中有发布时间,必须使用日期选择器定义在某个日期发布新闻的时间 这是一篇新的新闻Javascript 从'const now=new Date()`,如何验证我在给定时区和小时的特定日期之前或之前?,javascript,node.js,date,momentjs,date-nfs,Javascript,Node.js,Date,Momentjs,Date Nfs,我有一个时区地图,在本地区域中有发布时间,必须使用日期选择器定义在某个日期发布新闻的时间 这是一篇新的新闻文章,初始化为以下内容: {timeZoneId:'欧洲/巴黎,发布时间:9,发布日期时间:未定义}//9是GMT+1的时间 我想知道如何从const now=new Date(),验证这篇文章是否应该 今天或第二天公布的标准是: 现在是否在发布时间之前?(巴黎格林尼治标准时间上午9点+1是否已经过去) 如果是,那么我们应该在格林尼治标准时间上午9点+1+1天提供下一个发布时段 如果没
文章
,初始化为以下内容:
//9是GMT+1的时间{timeZoneId:'欧洲/巴黎,发布时间:9,发布日期时间:未定义}
const now=new Date()
,验证这篇文章是否应该
今天或第二天公布的标准是:
现在是否在
?(巴黎格林尼治标准时间上午9点+1是否已经过去)发布时间之前
- 如果是,那么我们应该在格林尼治标准时间上午9点+1+1天提供下一个发布时段
- 如果没有,那么我们应该在当天上午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偏移,而是我偏移的日期
我尝试了一些其他的想法,使用
时刻tz
和香草日期
,我发现这项任务有点复杂,希望能在JS社区中找到帮助,因为这看起来是一个普通的日期比较。您可以使用Intl对象和方法,使用IANA获取任何受支持时区的当前时间。是的
例如
函数getHour(日期,loc){
设d=新的Intl.DateTimeFormat(“en”{
小时:'数字',
小时12:错,
时区:loc
});
返回d.formatToParts(日期)[0]。值;
}
let loc=‘欧洲/巴黎’;
让我们现在=新日期();
log(${loc}中的当前小时是${getHour(now,loc)}.`)代码>