2010-11-17 74 views
0

我在周六下午6点和周日上午4点之间显示一条消息。上次我不得不这样做,它不起作用,因为我没有考虑到UTC时间变为负值时,将其更改为纽约时间。这个JS时间码会工作吗?我可以做得更好吗?

我在做数学的权利(在适当的时间显示)?我应该把UTC转换代码放到它自己的函数中吗?这是你见过的最糟糕的js吗?

- jQuery是叫 -

$(document).ready(function() { 
var dayTime = new Date(); 
var day = dayTime.getUTCDay(); 
var hour = dayTime.getUTCHours(); 
    //alert(day.toString()+" "+hour.toString()); 
    if (hour >= 5){ 
     hour = hour-5;   
    } 
    else{ 
     hour = hour+19; 
      if(day > 0){ 
       day--; 
      } 
      else{ 
       day = 6;  
      } 
    } 
    //alert(day.toString()+" "+hour.toString()); 
    if ((day == 6 && hour >= 18) || (day == 0 && hour < 4)){    
    } 
    else{ 
     $('#warning').hide(); //Want this message to show if js is disabled as well 
    } 
}); 

回答

2

为什么你甚至不需要是UTC的东西?只是当地时间工作:

var day = dayTime.getDay(); 
var hour = dayTime.getHours(); 

你可以清理条件有点太:

if (!(day == 6 && hour >= 18) && !(day == 0 && hour < 4)) { 
    $('#warning').hide(); 
} 
+0

我们有国际用户,所以我的想法是,维护是EDT,我需要考虑,因为当地时间将是他们当地的时间。感谢您对条件的帮助。 – 2010-11-17 15:54:39

+0

希望能够从整体上获得更多关于脚本的反馈,但是这有所帮助,非常感谢! – 2010-11-17 23:51:55

0

这应该让您的服务器的时间:

var dayTime = new Date(); 
localOffset = dayTime.getTimezoneOffset() * 60000; 
serverOffset = 5 * 60 * 60000; 
dayTime = new Date(dayTime.getTime() + (localOffset - serverOffset)); 

玩弄那服务器偏移量中的“5”;这是几个小时。它可能需要是-5;我不太确定。

此外,这将打破每一个夏令时。你必须以某种方式检测并修改serverOffset。