javascript - jQueryUI 日期选择器突出显示第二天

标签 javascript jquery datepicker jquery-ui-datepicker

出于某种原因,jQueryUI 日期选择器会突出显示第二天,即使所有 console.log 消息都在正确的日期处理。

查看此jsfiddle .

根据我自己的代码,我应该突出显示 29-08-2018,但 30-08-2018 是突出显示的。工具提示消息也添加到第 30 号,但仍然显示为 29 号。

datepicker with tooltip

此外,当我查看控制台时,我看到 29 号正在执行的操作:

enter image description here

$('.datepicker').each(function() {
  var $el = $(this);
  var specialdays = $el.attr('data-specialdays');
  var specialdaysJson = null;
  if (specialdays) {
    specialdaysJson = JSON.parse(specialdays);
  }

  $el.datepicker({
    dateFormat: 'dd-mm-yy',
    firstDay: 1,
    beforeShowDay: function(date) {
      if (!specialdaysJson) {
        return [true,''];
      }

      var dpd = 'date_' + date.toISOString().split('T')[0];
      console.log(date, dpd);

      if (specialdaysJson.hasOwnProperty(dpd)) {
        console.log('change');
        specialdaysJson[dpd][2] = 'Set for ' + dpd;
        return specialdaysJson[dpd];
      }
      return [true,''];
    }
  });
})

最佳答案

当使用date.toISOString().split('T')[0]时,它会首先将日期转换为UTC。

因此,如果您位于正时区且时间较早,那么时间可能会倒退一天。

或者,如果您位于负时区并且您的时间晚了,那么它可能会增加一天

尝试下面的代码:

$('.datepicker').each(function() {
  var $el = $(this);
  var specialdays = $el.attr('data-specialdays');
  var specialdaysJson = null;
  if (specialdays) {
    specialdaysJson = JSON.parse(specialdays);
   
  }

  $el.datepicker({
    dateFormat: 'dd-mm-yy',
    firstDay: 1,
    beforeShowDay: function(date) {
      if (!specialdaysJson) {
        return [true,''];
      }

let newDate = new Date(date)
      var dpd = 'date_' +  new Date(newDate.getTime() - (newDate.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];
      console.log(date,"DDDD",dpd)
     
      if (specialdaysJson.hasOwnProperty(dpd)) {
        specialdaysJson[dpd][2] = 'Set for ' + dpd;
        console.log(specialdaysJson[dpd], date)
        return specialdaysJson[dpd];
      }
      return [true,''];
    }
  });
})
#ui-datepicker-div { font-size: 12px; } 
.bg-highlight { background-color: #F00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css' />


<input type="text" class="datepicker" data-specialdays='{"date_2019-05-17":[true,"bg-highlight","tooltipText"]}' name="date1"/> <br/>

关于javascript - jQueryUI 日期选择器突出显示第二天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56181066/

相关文章:

javascript - 有没有办法在我们看到一个div一段时间后制作一个动画?

android - 在 Android 上的 DatePicker 中显示选定的日期范围(+ 作为标题)

javascript - 如何将事件绑定(bind)到另一个动态创建的元素内的动态创建的元素?

javascript - 按 'j' 时滚动到下一个 <div>

javascript - 如何在纯html中使用对话框?

jQuery - 如何从一种颜色淡入/淡出到另一种颜色? (可能是 jQuery 的第 3 方插件吗?)

javascript - 在 svg 文本元素中添加带空格的文本

javascript - 如何用jquery获取子菜单中li的父级值?

javascript - jQuery datepicker w/脚本来禁用日期,在 fiddle 中工作。不在现场

javascript - 如何创建具有 3 个输入但映射到 1 个 yup 值的 Formik 和 yup 表单组件?