Javascript 如何确定在工作时间/天数内显示的图像?
所以我之前已经问过这个问题,我得到了以下答案,这确实很有帮助!但是,假设该公司在太平洋标准时间(加利福尼亚州)上午9:00开始营业,下午5:00结束营业,周六和周日结束营业 我如何在下面调整它 另外,请记住,下面的脚本会根据工作时间触发图像显示/显示/隐藏。因此,在太平洋标准时间上午9:00时,图像显示为“我们开门”,下午5:00时,图像显示为“我们关门”。谢谢各位,我希望我已经输入了足够的数据/信息供你们回答这个问题 这里有一个参考资料Javascript 如何确定在工作时间/天数内显示的图像?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,所以我之前已经问过这个问题,我得到了以下答案,这确实很有帮助!但是,假设该公司在太平洋标准时间(加利福尼亚州)上午9:00开始营业,下午5:00结束营业,周六和周日结束营业 我如何在下面调整它 另外,请记住,下面的脚本会根据工作时间触发图像显示/显示/隐藏。因此,在太平洋标准时间上午9:00时,图像显示为“我们开门”,下午5:00时,图像显示为“我们关门”。谢谢各位,我希望我已经输入了足够的数据/信息供你们回答这个问题 这里有一个参考资料 $(窗口).load(函数(){ //将小时数转换为UT
$(窗口).load(函数(){
//将小时数转换为UTC,这里的示例是使用
//中央标准时间(-0500 UTC)
//UTC的营业时间为16小时,第二天的营业时间为0小时
var d=新日期(),
打开=新日期(),
关闭=新日期();
//静态设置打开的UTC日期
开放式毛状元(16);
打开。设置分钟数(0);
open.setUTCSeconds(0);
打开。设置单位毫秒(0);
//静态设置UTC关闭日期
closed.setUTCDate(d.getUTCDate()+1);//UTC时间旋转回0,添加一天
关闭。setUTCHours(0);//UTC小时数为0
关闭。设置分钟数(0);
关闭。设置秒(0);
关闭。设置单位毫秒(0);
//调试
控制台日志(“用户日期:+d”);
日志(“在用户时区中存储打开时间:“+open”);
日志(“在用户时区中存储关闭时间:“+closed”);
console.log(d>open);//用户的时间大于打开时间
console.log(d打开和d<关闭){
setOpenStatus(true);
}否则{
setOpenStatus(false);
}
函数setOpenStatus(isOpen){
$('#opend')。切换(等参);
$('#closed')。切换(!isOpen);
}
});
编辑/更新的脚本
$(window).load(function(){
// Translate your hours to UTC, example here is using
// Central Standard Time (-0500 UTC)
// Opening hour in UTC is 16, Closing hour is 0 the next day
var d = new Date(),
open = new Date(),
closed = new Date();
// Statically set UTC date for open
open.setUTCHours(16);
open.setUTCMinutes(0);
open.setUTCSeconds(0);
open.setUTCMilliseconds(0);
// Statically Set UTC date for closing
closed.setUTCDate(d.getUTCDate()+1); // UTC time rotates back to 0, add a day
closed.setUTCHours(0); // UTC hours is 0
closed.setUTCMinutes(0);
closed.setUTCSeconds(0);
closed.setUTCMilliseconds(0);
// Debugging
console.log("user's date:" + d);
console.log("store open time in user's timezone:" + open);
console.log("store close time in user's timezone:" + closed);
console.log(d > open); // user's time is greater than opening time
console.log(d < closed); // is user's time less than closing time
// (you don't have to go home...)
// Test for store open?
if (d > open && d < closed) {
setOpenStatus(true);
}
if (d.getDay() !== 0 && d.getDay() !== 6 && (d > open && d < closed))
else {
setOpenStatus(false);
}
function setOpenStatus(isOpen) {
$('#opend').toggle(isOpen);
$('#closed').toggle(!isOpen);
}
});
$(窗口).load(函数(){
//将小时数转换为UTC,这里的示例是使用
//中央标准时间(-0500 UTC)
//UTC的营业时间为16小时,第二天的营业时间为0小时
var d=新日期(),
打开=新日期(),
关闭=新日期();
//静态设置打开的UTC日期
开放式毛状元(16);
打开。设置分钟数(0);
open.setUTCSeconds(0);
打开。设置单位毫秒(0);
//静态设置UTC关闭日期
closed.setUTCDate(d.getUTCDate()+1);//UTC时间旋转回0,添加一天
关闭。setUTCHours(0);//UTC小时数为0
关闭。设置分钟数(0);
关闭。设置秒(0);
关闭。设置单位毫秒(0);
//调试
控制台日志(“用户日期:+d”);
日志(“在用户时区中存储打开时间:“+open”);
日志(“在用户时区中存储关闭时间:“+closed”);
console.log(d>open);//用户的时间大于打开时间
console.log(d打开和d<关闭){
setOpenStatus(true);
}
如果(d.getDay()!==0和d.getDay()!==6和(d>打开和d<关闭))
否则{
setOpenStatus(false);
}
函数setOpenStatus(isOpen){
$('#opend')。切换(等参);
$('#closed')。切换(!isOpen);
}
});
将下面几行改为这一行,目前有点混乱
if (d.getDay() !== 0 && d.getDay() !== 6 && (d >= open && d < closed)) {
setOpenStatus(true);
} else {
setOpenStatus(false);
}
if(d.getDay()!==0和d.getDay()!==6和(d>=打开和关闭)){
setOpenStatus(true);
}否则{
setOpenStatus(false);
}
所以你理解了这个条件,它说:如果不是星期天
(d.getDay()!==0)
或星期六(d.getDay()!==6)
并且当前时间在打开时间之后或打开时间之前(d>=open)
,那么设置打开状态,否则(else)
,设置关闭状态。如果您以前问过这个问题,那么您应该在另一个问题上得到一个小的改变:是的,但有些问题说明它对我不起作用。我试过了,我可能做错了什么-请看上面的代码-我不能将我的代码片段添加到这个评论区。它到底是怎么不起作用的?错误的时间?控制台上出现了什么?@orbling:它说-->else上有语法错误{啊,是的,我明白了,看看我的答案。先生,你真是太棒了!!所以我整合了你的建议,它完美地工作了。不过,为了确保我有这个权利,它说我的工作时间是在太平洋标准时间上午9-5点到周六结束之间。到周日?我不是JS专家,这就是我为什么问这些问题的原因。谢谢奥布林!@Stuart:我没有调整时间所有时间,如果示例是CST,则仍然设置为该时间。只需调整UTC时间以适应。UTC与GMT相同,PST为UTC-8(请注意,大部分PST波段,如果不是所有的话,在夏季切换为PDT,即UTC-7)@Orbling我相信只有当您的工作时间在UTC的同一天时,这才有效。在上面的示例中,如果工作时间延长到UTC第二天凌晨1点,那么在UTC周六上午12:30访问页面的用户将无法正确计数(他们的d.getDay()将是周六)。这段代码会告诉他们,当星期五太平洋标准时间实际上是一天的最后一个小时时,商店就关门了。@jamis0n:正确,我不知道海报为什么使用UTC而不是当地时间。使用工作日来检查一天的定义是否没有得到遵守显然会被打破。解决方法是将datetime调整为l如果本地时间在一天之内,则在获取一周中的某一天之前使用本地时区,否则会很复杂,需要使用纯粹的开放时间作为使用中的一周中的某一天,并将当前日期追溯到开放的时间,或者设置一些任意的日期边界,如上午6点。
if (d.getDay() !== 0 && d.getDay() !== 6 && (d >= open && d < closed)) {
setOpenStatus(true);
} else {
setOpenStatus(false);
}