【发布时间】:2015-06-22 14:19:21
【问题描述】:
我已经接管了某人对 jQuery 日期选择器调用的修改。我遇到的问题是,当我将今天作为最小日期和从现在起的一年作为最大日期传入时,“年”列显示 2015 和 2016,这是应该的,但“月”列仅显示本月向前到十二月。缺少当前月份之前的所有月份。
我不确定是否应该将我传入的最小日期更改为今年的第一天?或者我可以更改此 JavaScript 以仍然显示所有月份,即使最小日期是今天?
function createDatepicker($field) {
var minDateStr = $field.attr('data-min-date').split('-');
var maxDateStr = $field.attr('data-max-date').split('-');
var minDate = new Date(parseInt(minDateStr[2]), parseInt(minDateStr[0])-1, parseInt(minDateStr[1]));
var maxDate = new Date(parseInt(maxDateStr[2]), parseInt(maxDateStr[0])-1, parseInt(maxDateStr[1]));
var div = $field.parent();
var sy = $('.datepicker-year', div).first();
var sm = $('.datepicker-month', div).first();
var sd = $('.datepicker-day', div).first();
$field.datepicker({
changeMonth: true,
changeYear: true,
yearRange: '-' + minDate.getFullYear() + ':+' + maxDate.getFullYear,
minDate: minDate,
maxDate: maxDate,
showOn: 'button',
firstDay: 1,
beforeShow: function (obj, inst) {
var year = parseInt(sy.val());
var month = parseInt(sm.val());
var day = parseInt(sd.val());
if (year > 0 && month > 0 && day > 0) {
if (month < 10) month = '0' + month;
if (day < 10) day = '0' + day;
$(obj).datepicker('setDate', month + '/' + day + '/' + year);
}
},
onClose: function (dateText, inst) {
if (dateText != undefined && dateText.length > 0) {
var date = dateText.split('/');
var year = parseInt(date[2]);
var month = parseInt(date[0]);
var day = parseInt(date[1]);
sy.val(year);
sm.val(month);
sd.val(day);
}
}
});
}
【问题讨论】:
-
好吧,如果 min-date 是今天,它应该应该从今天到 12 月显示,不是吗?如果要显示一年中的剩余时间,则应提供 min-date 作为今年的第一天。
-
哦等等,
maxDate.getFullYear。在maxDate.getFullYear之后缺少()。另外,':+' 中的 + 是故意的吗? -
正如 briosheje 所说,这是因为缺少
(),这导致了错误的yearRange值:jsfiddle.net/uyk557da -
@PatrickEvans :我认为你应该得到答案,因为你创建了小提琴,因此你应该发布一个包含小提琴的答案,我刚刚发现括号不见了,但不是真的确信这可能是真正的问题,而 patrick 测试了它,所以他应该得到这个答案的声誉;)
-
@briosheje,实际上它应该作为印刷错误关闭,因为 OP 知道将
()放在另一个 getFullYear 语句中
标签: javascript jquery date datepicker