通常情况下,我已经做了一些工作才能到达需要帮助的地方,但是我对此完全感到困惑。
使用普通的ol JavaScript,我需要根据元素的文本是否在以下任何小时/天组合中落入来进行更改:
M-F 5:00 AM-9:00 PM Pacific Time
Sa-Su 5:00 AM-5:30 PM Pacific Time
如果访问该网站的人处于同一时区,我知道该怎么做,但是我不知道该怎么做以确保每个人都可以看到正确的东西,而不管他们所在的时区如何。
答案 0 :(得分:1)
太平洋标准时间为UTC-0800,但是在所有使用PST的地方也都采用夏令时,因此仅转换为PST可能不够。
无论如何,正如kfedorov91所建议的那样,您可以将PST时间转换为UTC以创建合适的Date对象,然后与之比较。请注意,太平洋标准时间21:00是第二天的05:00 UTC,但这并不是真正的问题。您可以将开始时间设置为13:00 UTC,然后在周一至周五增加16小时,在周六和周日增加12.5小时。
要获取正确的开始日期(如果该时间早于UTC 08:00),请将UTC日期更改为前一天,并将时间更改为05:00。然后根据是工作日还是工作日结束,通过添加开放时间来设置结束时间。
// M-F 05:00 - 21:00 PST -> 13:00 - 05:00 UTC
// Sa-Su 05:00 - 17:30 PST -> 13:00 - 01:30 UTC
function getRange(date) {
// Start is 1300 UTC every day
var start = new Date(date);
// If before 0800 UTC, set to previous day
if (start.getUTCHours() < 8) {
start.setDate(start.getDate() - 1);
}
start.setUTCHours(13,0,0,0);
// Set end to +16 or +12.5 hours if weekend
var end = new Date(start);
if (end.getDay() % 6) {
end.setHours(end.getHours() + 16);
} else {
end.setHours(end.getHours() + 12, 30);
}
return [start, end];
}
function isInRange(date) {
date = date || new Date();
var range = getRange(date);
return date >= range[0] && date <= range[1];
}
// Helper to get current time PST (UTC-0800)
function getPSTTime(date) {
date = date || new Date();
function z(n){return (n<10?'0':'')+n}
var d = new Date(date);
d.setUTCHours(d.getUTCHours()-8);
return 'Sun Mon Tue Wed Thu Fri Sat'.split(' ' )[d.getUTCDay()] + ' ' + z(d.getUTCHours()) + ':' + z(d.getUTCMinutes());
}
// Is the current time in range?
var d = new Date();
console.log('PST Time: ' + getPSTTime());
console.log('Is it in range? ' + (isInRange(d)? 'yes':'no'));
答案 1 :(得分:0)
最简单的方法是将您的小时数转换为UTC时间,然后使用JS Date的UTC函数。 UTC比现在的太平洋时间早7个小时,所以您的UTC时间为:
M-F 12:00 PM - 4:00 AM UTC
Sa-Su 12:00 PM - 12:30 AM UTC
然后知道您可以做到:
function isItWorkingHours(date = null) {
date = date ? date : new Date();
const utcDay = date.getUTCDay();
const utcHour = date.getUTCHours();
const utcMinute = date.getUTCMinutes();
if (utcHour >= 12) { // any day after noon
return true;
} else if (
utcHour === 0 && // between 12 AM & 1 AM
utcMinute <= 30 && // before 12:30 AM
utcDay <= 1 // on sunday or monday
) {
return true;
} else if (
utcHour <= 4 && // before 4AM
utcDay >= 2 && // on or after Tuesday
utcDay <= 7 // on or before Saturday
) {
return true;
} else {
return false;
}
}
console.log(isItWorkingHours());
当然,这有点令人困惑,并且由于太平洋时间进入和退出夏令时而UTC忽略了它,因此您将不得不对其进行一些更新。如果您愿意加入第三方的依赖关系,那么绝对应该考虑使用Moment.js