Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从'const now=new Date()`,如何验证我在给定时区和小时的特定日期之前或之前?_Javascript_Node.js_Date_Momentjs_Date Nfs - Fatal编程技术网

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天提供下一个发布时段 如果没

我有一个时区地图,在本地区域中有发布时间,必须使用日期选择器定义在某个日期发布新闻的时间

这是一篇新的新闻
文章
,初始化为以下内容:

  • {timeZoneId:'欧洲/巴黎,发布时间:9,发布日期时间:未定义}
    //9是GMT+1的时间
我想知道如何从
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)}.`)