【问题标题】:from `const now = new Date()`, how can I verify that I am before or equal a particular date at a given timezone and hour?从`const now = new Date()`,我如何验证我是否在给定时区和小时的特定日期之前或等于特定日期?
【发布时间】:2020-03-21 09:20:04
【问题描述】:

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

这是一条新消息article,初始化如下:

  • { timeZoneId: 'Europe/Paris, releaseHour: 9, publishingDateTime: undefined } // 9 是 GMT+1 小时

我想知道如何从const now = new Date(),验证这篇文章是否应该 今天或第二天发布,标准是:

  • nowreleaseHour 之前吗? (巴黎的格林威治标准时间+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


    【解决方案1】:

    您可以通过 IANA representative locations 使用 Intl 对象和 formatToParts 方法获取任何支持的时区中的当前时间。我是reasonably well supported

    例如

    function getHour(date, loc) {
      let d = new Intl.DateTimeFormat("en-EN", {
        hour: 'numeric',
        hour12: false,
        timeZone: loc
      });
      return d.formatToParts(date)[0].value;
    }
    
    let loc = 'Europe/Paris';
    let now = new Date();
    console.log(`The current hour in ${loc} is ${getHour(now, loc)}.`);

    以上只是为了说明,应该有输入和返回值的验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多