javascript - jquery datepicker getTime 不是 UTC

标签 javascript jquery jquery-ui jquery-ui-datepicker utc

在日期选择器到达 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
});

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

有什么办法可以使它们匹配吗?我认为这是不是 UTC 的日期选择器时间。

编辑:

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

<option value="2013, 2, 1">01/03/2013</option>

最佳答案

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

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

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

通常,我会使用 new Date(year, month, day) 构造函数而不是 Date.UTC 函数,但您不能使用 应用 Date 构造函数。

如果您宁愿将 startDates 数组保留为 UTC,则需要将日期选择器的日期转换为 UTC:

function showEventDates(date) {
  date = date - new Date(date).getTimezoneOffset() * 60000; // convert local to UTC
  // for ...
}

注意:选择一种这些方法中的另一种,而不是两种,否则你最终会遇到同样的问题......:-)

关于javascript - jquery datepicker getTime 不是 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962222/

相关文章:

javascript - 如何在javascript函数中添加和删除css类

javascript - WebGL - 顶点着色器调用的变量数组大小

javascript - 向下滚动后将更多 View 附加到 WebView

javascript - 问题更新 css 转换的 div 的高度(FlexBox,Sass)

Javascript onchange 函数在移动设备上的选择菜单中不起作用

javascript - jqGrid Column Resize 显示拖拽的列

jquery - 在排序更改事件期间更新排序顺序 - jQuery UI

javascript - 使用 Razor 的 JavaScript 中的撇号问题

javascript - 带有更多链接的 Bootstrap Navigation.. 试图用 jquery 找到解决方案

javascript - jQuery UI 可拖动,捕捉到网格