2011-12-06 26 views
5

这种方法是line 1380 in the jQuery ui datepicker有人可以解释为什么这在jQuery UI日期选择器?

_daylightSavingAdjust: function(date) { 
    if (!date) { 
     return null; 
    } 
    date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); 
    return date; 
} 

它在日期选择器代码中的许多地方使用。至于我可以看到这个代码将只加2个小时具有任何时间日期> 12,否则设定时间为0。

我试图在我的控制台:

date = new Date(); 
console.log("" + date); 
date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); 
console.log("" + date); 

而且我得到了:

Tue Dec 06 2011 18:36:06 GMT+0100 (CET) 
Tue Dec 06 2011 20:36:06 GMT+0100 (CET) 
+0

我猜测它做了它所做的事情,在出现问题时调整夏令时的实例。我住在哪里,夏令时只有一个小时,而不是两个? – adeneo

+0

在您的问题中添加了实际代码行的链接。这里有一个评论,但它并没有使问题变得更清楚。看起来他们试图在某些角落案例中触发日期增加到第二天,但我并没有真正遵循逻辑。请注意,当代码<= 12时,该代码也明确将小时设置为'0'。 –

+0

经过仔细观察,我发现该方法严格使用日期。例如,在datepicker.parseDate方法中,在将新日期传递给daylightSavingAdjust之后,会检查它是否已更改。如果确实如此,则会引发错误。 – disc0dancer

回答

5

的注释是一个有点神秘确实:

/* Handle switch to/from daylight saving. 
    Hours may be non-zero on daylight saving cut-over: 
    > 12 when midnight changeover, but then cannot generate 
    midnight datetime, so jump to 1AM, otherwise reset. 
    @param date (Date) the date to check 
    @return (Date) the corrected date */ 

的日期选择在创建日期对象从选定日期开始没有指定时间 - 所以使用午夜。在某些地方,夏令时在午夜开始,将时间推回到前一天的11点。

因此,此函数查看Date对象的小时,以确定它是否必须将时间向前推两小时才能获得正确的日期。

相关问题