检查当前时间是否在不同时区的2次之间

Check if current time is between 2 times in different Timezone

本文关键字:时区 2次 之间 时间 是否 检查      更新时间:2023-09-26

需要查找访问我的页面的用户是否在支持时间8:00am或16:00pm PST之间,因此,如果来自亚洲或其他时区的用户在这些时间之外访问页面获得自定义标签,我可以使其工作不涉及时区,但我有时区问题,下面的代码总是返回true。有什么办法做到这一点吗?

import moment from 'moment';
import 'moment-timezone';
const timezone = 'America/Los_Angeles';
const supportStartTime = moment().tz(timezone).hours(8).minutes(0).seconds(0);
const supportEndsTime = moment().tz(timezone).hours(16).minutes(0).seconds(0);
const now = moment();
const isBetweenWorkingHours = now.isBetween(supportStartTime,supportEndsTime);

似乎工作正常:

var timezone = 'America/Los_Angeles';
var supportStartTime = moment().tz(timezone).hours(8).minutes(0).seconds(0);
console.log(supportStartTime.format());
var supportEndsTime = moment().tz(timezone).hours(16).minutes(0).seconds(0);
console.log(supportEndsTime.format());
var now = moment().tz('EST').startOf('day').hours(10);
console.log(now.format());
var isBetweenWorkingHours = now.isBetween(supportStartTime,supportEndsTime);
console.log(isBetweenWorkingHours);
var now = moment().tz('EST').startOf('day').hours(12);
console.log(now.format());
var isBetweenWorkingHours = now.isBetween(supportStartTime,supportEndsTime);
console.log(isBetweenWorkingHours);
var now = moment();
console.log(now.format());
var isBetweenWorkingHours = now.isBetween(supportStartTime,supportEndsTime);
console.log(isBetweenWorkingHours);

生产:

2016-11-06T08:00:00-08:00
2016-11-06T16:00:00-08:00
2016-11-06T10:00:00-05:00
false
2016-11-06T12:00:00-05:00
true
2016-11-06T15:22:48-08:00
true

(我使用的是太平洋时间,这就是为什么最后一项显示的是时区)


console.log(moment().format());
console.log(moment().tz('EST').format());
console.log(moment().tz('UTC').format());

生产:

2016-11-06T16:24:53-08:00
2016-11-06T19:24:53-05:00
2016-11-07T00:24:53Z

这些都是相同的"现在"。如果你在EST运行moment().format(),你会得到当前时间和你的时区(第2行)。如果有人在UTC同时运行moment().format(),他们会得到相对于他们自己的时区的"现在"(第3行)。它们都是相同的"现在",因为它们是同时运行的,它们只是有不同的本地表示。