jQuery datepicker年显示


78

使用jQuery datepicker,如何更改显示的年份范围?在jQuery UI网站上,默认设置为“显示当前年份之前和之后的10年”。我想将其用于生日选择,今天之前的10年是不好的。可以使用jQuery datepicker完成此操作,还是必须使用其他解决方案?

链接到datepicker演示:http : //jqueryui.com/demos/datepicker/#dropdown-month-year

Answers:


165

如果稍微看一下演示页面,您将看到“限制日期选择器”部分。使用下拉菜单指定“ Year dropdown shows last 20 years”演示,然后点击查看源代码:

$("#restricting").datepicker({ 
    yearRange: "-20:+0", // this is the option you're looking for
    showOn: "both", 
    buttonImage: "templates/images/calendar.gif", 
    buttonImageOnly: true 
});

您将需要执行相同的操作(显然更改-20-100或进行其他操作)。


谢谢!我看了看那里,但一定错过了。完美运作。
John Boker

1
我正在尝试使用此功能,但它仅显示从当前选择的日期起的- 20年...?
ajbeaven

5
您也可以使用c代替+0,所以yearRange: "-20:c",
Kokos

40

为什么不显示年或月选择框?

$( ".datefield" ).datepicker({
    changeMonth: true,
    changeYear: true,
    yearRange:'-90:+0'
});

1
大概应该是yearRange左右的报价。
Eonasdan

这正是我在寻找的..谢谢您,先生.. changeMonth,changeYear
kebyang

那是一个完美的答案!谢谢!
DmitryBoyko

10

没有人提出的是,您还可以设置硬编码的日期范围:

例如:

yearRange: "1901:2012"

尽管不建议这样做,但它是一个完全有效的选项(如果您正当地在目录中寻找特定年份,例如“ 1963:1984”,则很有用)。


6

尽管我将给出一个更具体的DOB示例,但最适合于出生日期字段(以及我使用的日期)的方法类似于Shog9所说的:

$(".datePickerDOB").datepicker({ 
    yearRange: "-122:-18", //18 years or older up to 122yo (oldest person ever, can be sensibly set to something much smaller in most cases)
    maxDate: "-18Y", //Will only allow the selection of dates more than 18 years ago, useful if you need to restrict this
    minDate: "-122Y"
});

希望未来的Google员工觉得这很有用:)。


年龄最大的人是珍妮·卡曼(Jeanne Calmant),现年122岁。我将其设置为140,以保持一定的余量:)
Christophe Roussy

@ChristopheRoussy你是对的,我想我正在想活着的最老的人...他现在已经116岁了:)。答案已编辑。
Maverick

5

除了@ Shog9发布的内容外,您还可以在beforeShowDay:回调函数中分别限制日期。

您提供了一个带有日期并返回布尔数组的函数:

"$(".selector").datepicker({ beforeShowDay: nationalDays}) 
natDays = [[1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'], [4, 27, 'za'], 
[5, 25, 'ar'], [6, 6, 'se'], [7, 4, 'us'], [8, 17, 'id'], [9, 7, 
'br'], [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']]; 
function nationalDays(date) { 
    for (i = 0; i < natDays.length; i++) { 
      if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == 
natDays[i][1]) { 
        return [false, natDays[i][2] + '_day']; 
      } 
    } 
  return [true, '']; 
} 

这里突出显示的语法有什么问题?国庆节怎么办?如果您能澄清一下,我不明白您的代码吗?
knocte 2014年

3
 $("#DateOfBirth").datepicker({
        yearRange: "-100:+0",
        changeMonth: true,
        changeYear: true,
    });

yearRange:'1950:2013',//指定硬编码的年份范围或这种方式

yearRange:“ -100:+0”,//最近一百年

这将有助于显示年份和月份选择的下拉列表。


2

au,nz等是显示国庆日的国家(澳大利亚,新西兰,爱尔兰等)的国家代码。从代码中可以看出,这些值与“ _day”组合在一起并作为CSS样式传递回该日期。相应的样式具有下面所示的形式,该样式将当天的文本移开,并替换为该国家的国旗图像。

.au_day {
  text-indent: -9999px;
  background: #eee url(au.gif) no-repeat center;
}

以新样式传回的'false'值表示这些天可能未被选中。


1

我认为这可能也有效

$(function () {
    $(".DatepickerInputdob").datepicker({
        dateFormat: "d M yy",
        changeMonth: true,
        changeYear: true,
        yearRange: '1900:+0',
        defaultDate: '01 JAN 1900'
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.