jquery datepicker getTime不是UTC

Tom*_*Tom 7 javascript jquery jquery-ui utc jquery-ui-datepicker

我有以下代码,可以正常工作,直到datepicker达到BST.

var i;
function showEventDates(date) {
  for (i = 0; i < startDates.length; i++) {
    if (date.getTime() == startDates[i]) {
      return [true, 'eventDay'];
    }
  }    
  return [false, ''];
}
var startDates = new Array();

$("select.startdates").find("option").each( function() {
  startDates.push(Date.UTC.apply(Date, this.value.split(",").map(Number)));
});

$('#mydate').datepicker({
    beforeShowDay: showEventDates
});
Run Code Online (Sandbox Code Playgroud)

在BST期间,该行if (date.getTime() == startDates[i]) {返回false,因为有一个小时的差异.

我有什么想法可以让这些匹配?我认为这是不是UTC的日期选择时间.

编辑:

select.startdates中的一个选项示例是

<option value="2013, 2, 1">01/03/2013</option>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ijn 2

看起来日期选择器不返回 UTC 日期,而是本地日期(这实际上是 Javascript 中的默认值)。

\n\n

要将构建的日期转换为当地时间:

\n\n
$("select.startdates").find("option").each( function() {\n  var d = Date.UTC.apply(Date, this.value.split(",").map(Number));\n  d = d + new Date(d).getTimezoneOffset() * 60000; // convert UTC to local\n  startDates.push(d);\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

通常,我\xe2\x80\x99d使用new Date(year, month, day)构造函数而不是Date.UTC函数,但是你可以\xe2\x80\x99tapplyDate使用。

\n\n

如果您\xe2\x80\x99d 宁愿将 startDates 数组保留为 UTC,那么您需要将 datepicker\xe2\x80\x99s 日期转换为 UTC:

\n\n
function showEventDates(date) {\n  date = date - new Date(date).getTimezoneOffset() * 60000; // convert local to UTC\n  // for ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:选择一项而不是两种,否则你\xe2\x80\x99最终会遇到同样的问题...:-)

\n