【问题标题】:Can someone explain why is this in the jQuery UI Datepicker?有人可以解释为什么在 jQuery UI Datepicker 中会这样吗?
【发布时间】:2012-01-14 07:25:09
【问题描述】:

这个方法在line 1380 in the jQuery ui datepicker:

_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)

【问题讨论】:

  • 我猜它会按照它所说的那样做,在有问题的情况下调整夏令时的时间。不过在我住的地方,夏令时只有一小时,而不是两小时?
  • 在您的问题中添加了指向实际代码行的链接。那里有一条评论,但这并没有使问题更加清晰。在某些极端情况下,他们似乎试图触发日期增加到第二天,但我并没有真正遵循逻辑。请注意,当<= 12 时,该代码还明确将时间设置为0
  • 仔细查看后发现该方法严格用于日期。例如,在 datepicker.parseDate 方法中,在将新日期传递给 daytimeSavingAdjust 之后,会检查它是否已更改。如果是这样,则会引发错误。
  • 我正在为 jQuery UI 日期选择器添加一个时间选择器,但我遇到了这个问题。

标签: jquery date datepicker


【解决方案1】:

评论确实有点神秘:

/* 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 */

Datepicker 在不指定时间的情况下从选定的日期内部创建日期对象 - 因此使用午夜。在某些地方,夏令时会在午夜开始,这会将时间倒回到前一天晚上 11 点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2022-01-10
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多