jQuery UI:日期选择器将年份范围下拉菜单设置为100年

326

使用Datepicker组件时,默认情况下年份下拉列表仅显示10年。用户必须单击最后一年才能添加更多年份。

我们如何设置初始范围为100年,以便用户默认情况下看到一个大的年份列表?

输入图像描述

    function InitDatePickers() {
        $(".datepicker").datepicker({
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            maxDate: '@maxDate',
            minDate: '@minDate'
        });
    }

@dmaij:如果只是看一眼API文档就能回答的话......不过没错,这张图片确实很棒...... :-) - T.J. Crowder
@T.J.Crowder应该有一个规则,问题应该看起来像这样。实际上,在API文档中查找可能会节省创建图像的时间。 - dmaij
13
好在有API。但我刚刚谷歌搜索“jquery datepicker year range”并找到了这个答案,10秒钟内解决了我的问题,比使用API还要快。 - Edwin Stoteler
7个回答

618

您可以使用此选项设置年份范围,根据此文档http://api.jqueryui.com/datepicker/#option-yearRange

yearRange: '1950:2013', // specifying a hard coded year range

或者这样

yearRange: "-100:+0", // last hundred years

从文档中

默认值:“c-10:c+10”

年份下拉菜单中显示的年份范围:相对于今天的年份(“-nn:+nn”),相对于当前选择的年份(“c-nn:c+nn”),绝对值(“nnnn:nnnn”)或这些格式的组合(“nnnn:-nn”)。请注意,此选项仅影响下拉菜单中显示的内容。要限制可以选择的日期,请使用minDate和/或maxDate选项。


5
之前我遇到了问题,后来意识到需要加上+号。 - th1rdey3
1
谢谢,以这种方式硬编码年份范围:'1950:2013' 是可行的。 - Ronald Nsabiyera
1
对于jQuery-Ui,yearRange: "c-100:+c+10" 工作正常,其中 c 代表当前年份。 - TechieBrij
2
@TechieBrij 这很有帮助,但应该是c-100:c+10 - DreamTeK
3
@Obsidian 中的 c 实际上表示“当前选择的年份”,而不是当前年份。参考链接:http://api.jqueryui.com/datepicker/#option-yearRange。 - wirey00

22

尝试以下操作:

ChangeYear:当设置为true时,表示可以选择当前月份日历中指示的前一个或后一个月份的单元格。此选项与options.showOtherMonths设置一起使用。

YearRange:指定年份下拉列表中的年份范围。(默认值:“-10:+10”)

示例:

$(document).ready(function() {
    $("#date").datepicker({
        changeYear:true,
        yearRange: "2005:2015"
    });
});

参见:使用jQuery Datepicker设置年份范围


7
我做了这个操作:
var dateToday = new Date();
var yrRange = dateToday.getFullYear() + ":" + (dateToday.getFullYear() + 50);
and then
yearRange : yrRange

50是与当前年份的范围。


7
您可以使用jQuery UI日期选择器中的此选项设置年份范围:
yearRange: "c-100:c+0", // last hundred years and current years

yearRange: "c-100:c+100", // last hundred years and future hundred years

yearRange: "c-10:c+10", // last ten years and future ten years

2
感谢提供这些示例。 - Jay

2
我想实现日期选择器以选择出生日期,但在更改yearRange时遇到了问题,因为它似乎无法与我的版本(1.5)一起使用。我更新了最新的jquery-ui datepicker版本,链接如下:https://github.com/uxsolutions/bootstrap-datepicker
然后我发现他们提供了这个非常有用的即时工具,所以您可以配置整个datepicker并查看必须使用哪些设置。
这就是我发现选项

defaultViewDate

是我要找的选项,而我在搜索网络时没有找到任何结果。
因此,对于其他用户:如果您还想提供日期选择器以更改出生日期,则建议使用此代码选项:
$('#birthdate').datepicker({
    startView: 2,
    maxViewMode: 2,
    daysOfWeekHighlighted: "1,2",
    defaultViewDate: { year: new Date().getFullYear()-20, month: 01, day: 01 }
});

打开日期选择器后,您将开始选择年份视图,相对于当前年份向前20年。

1

虽然原问题发布已经很久了,现在提出可能有点晚,但这是我所做的事情。

我需要一个70年的范围,虽然不像100年那么多,但对于访问者来说仍然是太多年需要滚动查看。(jQuery可以按组步进年份,但对大多数人来说这很麻烦。)

第一步是修改datepicker小部件的JavaScript代码:

在jquery-ui.js或jquery-ui-min.js中找到以下代码(它将被最小化):

for (a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+
a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)
 a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";
a.yearshtml+="</select>";

将其替换为以下内容:
a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+
 ".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');
 \" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');
 \">";
for(opg=-1;b<=g;b++) {
    a.yearshtml+=((b%10)==0 || opg==-1 ?
        (opg==1 ? (opg=0, '</optgroup>') : '')+
        (b<(g-10) ? (opg=1, '<optgroup label="'+b+' >">') : '') : '')+
        '<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";
}
a.yearshtml+="</select>";

这将在 OPTGROUP 标签中包含数十年(除了当前年份)。
接下来,将以下内容添加到您的 CSS 文件中:
.ui-datepicker OPTGROUP { font-weight:normal; }
.ui-datepicker OPTGROUP OPTION { display:none; text-align:right; }
.ui-datepicker OPTGROUP:hover OPTION { display:block; }

这将隐藏年代,直到访问者将鼠标悬停在基准年份上。您的访问者可以快速地浏览任意数量的年份。
请随意使用此代码;但请在您的代码中正确署名。

0
首先要注意哪个文件提供了你的视图,正如你所知,有两种类型的js文件,其中之一是普通的,名为bootstrap-datapicker.js。另一个主要使用的文件名为bootstrap-datapicker.min.js。最好在每个文件中找到相同的部分并进行编辑。 尝试使用yearRange: "c-100:c+0"。 如果你只是这样做并保存文件,你的日期选择器将能够选择过去的100年和未来的10年。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接