html JS世界时钟多条件显示

cnjp1d6j  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在运行一个世界时钟脚本(纽约,伦敦,东京,悉尼)的时间。在页面上,旁边的位置名称显示一个红/绿色,如果开放/关闭的市场状态。
所以,我试图为每个特定的位置设置不同的条件,例如:

  • 纽约股市上午9点开盘,下午17点收盘
  • 伦敦早上8点开门,下午16点关门

...在这段时间内,状态显示颜色(浅绿色),如果关闭,则此时显示状态颜色(红色)...
希望我弄清楚弄明白,我是为了长久地解决这件事而绝望的。

第一个

7tofc5zh

7tofc5zh1#

问题在于你对人力资源的评估会导致状态。正如所写的,状态总是红色的。这里有一个解决办法:
第一个

z0qdvdin

z0qdvdin2#

你的问题有答案,但你的代码看起来比它需要的复杂得多。考虑利用Intl.DateTimeFormat构造函数和formatToParts。下面的代码只使用时间,你可能想包括星期几、假日等。

function isMarketOpen(loc, tz, open, close, date = new Date()) {
  // Get time in particular location for given date
  let f = new Intl.DateTimeFormat('default', {
    hour: '2-digit',
    minute: '2-digit',
    timeZone: tz,
    timeZoneName: 'short'
  });
  let {hour, minute, timeZoneName} = f.formatToParts(date).reduce((acc, part) => {
    if (part.type != "literal") {
      acc[part.type] = part.value;
    }
    return acc;
  }, Object.create(null));
  // Return based on whether it's between open and close or not
  let time = hour*60 + minute*1;
  return `${loc} is ${time >= open && time <= close? 'open':'closed'} (${hour}:${minute} ${timeZoneName}).`;
}

// Sample data
let data = [
  {loc: 'New York',
   tz:  'America/New_York',
   open: 540, // Minutes
   close: 1020
  },{
   loc: 'London',
   tz:  'Europe/London',
   open: 480,
   close: 960
  }
];
// Show open/closed
data.forEach(obj => console.log(
  isMarketOpen(obj.loc, obj.tz, obj.open, obj.close)
));

相关问题