【问题标题】:jQuery UI DatePicker change highlighted "today" datejQuery UI DatePicker 更改突出显示的“今天”日期
【发布时间】:2014-07-10 01:57:10
【问题描述】:

我想在 jQuery Datepicker 中显式更改突出显示的今天日期。我尝试设置默认日期,但突出显示的日期仍然是我本地计算机的日期,即今天。

我想这样做是因为我使用的是自定义时区。基本上,这个自定义时区的当前年/月/日与我本地计算机的当前日期不同。

例如。

假设今天的日期是 07/10/2014 与我计算机的日期相同,但使用自定义时区,今天突出显示的日期应该是 07/09/2014:

【问题讨论】:

标签: jquery datepicker highlight


【解决方案1】:

不幸的是,“今天”是在 DatePicker 的 HTMLRendering 阶段计算的,这意味着为了“覆盖”您需要重新定义 $.datepicker_generateHTML 方法。我还发现默认状态下的“今天”按钮会被此覆盖破坏,因此也有必要覆盖该方法。

基本上,日期选择器会设置一个像“tempDate = new Date()”这样的内部变量,然后使用它来创建“今天”。我们所做的就是用一些时区偏移代码覆盖该变量,其余的会自行解决。

在下面的演示中,顶部是appLocalTimezone 的变量,将其设置为您想要的时区,它将根据应用程序更新日期选择器。原始代码/答案的所有功劳都在小提琴中

jsFiddle Demo

【讨论】:

  • 哇,看到 _generateHTML 覆盖后我的眼睛受伤了。它虽然有效,所以我接受这个答案,除非真的有更好的方法。谢谢!
  • @gino 是的,就像我说的那样,不幸的是它在渲染阶段计算:(
【解决方案2】:

对@haxxxton 的小调整,允许您将localToday 作为日期选择器中的选项传递。

// Get users 'today' date
var localToday = new Date();
localToday.setDate(tomorrow.getDate()+1); // tomorrow

// Pass the today date to datepicker
$( "#datepicker" ).datepicker({
    showButtonPanel: true,
    localToday: localToday    // This option determines the highlighted today date
});

我已经覆盖了 2 个日期选择器方法,以有条件地为“今天”日期使用新设置,而不是 new Date()。新设置称为localToday

像这样覆盖 $.datepicker._gotoToday$.datepicker._generateHTML

$.datepicker._gotoToday = function(id) {
    /* ... */
    var date = inst.settings.localToday || new Date()
    /* ... */
}

$.datepicker._generateHTML = function(inst) {
    /* ... */
    tempDate = inst.settings.localToday || new Date()
    /* ... */
}

这是一个demo,它显示了完整的代码和用法:http://jsfiddle.net/NAzz7/5/

【讨论】:

    【解决方案3】:

    使用 $( ".selector" ).datepicker({ defaultDate: -1 });

    【讨论】:

    • 这只是更改打开日期选择器时自动选择的日期(来自文档:“如果字段为空白,则设置日期以在首次打开时突出显示。”)。 OP 询问如何覆盖设置为“今天”的日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2011-12-11
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多