1

jQueryUI datepicker似乎有一个错误,它不会按要求包装世纪。我把69作为短暂的截止日期,似乎没有效果。相反,用户界面在87年以下的任何年份显示1970年(所以它不接受它们有效?)。我在那里做错了什么? 1970年至1986年之间,键入的值不会同步到UI。Datepicker没有正确切断两位数格式的日期

enter image description here

我们的目标是让用户到1970年之间的任何日期设置为2069分别与70含义1970年和69含义2069短符号。

JSFiddle。堆栈溢出的嵌入式播放器不会正确显示日期选择器的用户界面,它隐藏了输入字段 - 请使用jsfiddle。

$(document).ready(function() { 
 
    $('#myDate').datepicker({ 
 
    changeMonth: true, 
 
    changeYear: true, 
 
    dateFormat: 'm/d/y', 
 
    shortYearCutoff: '69', 
 
    yearRange: '1970:2069' 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/> 
 

 
<input id="myDate" name="myDate" type="date" value="" />

+1

使用片段的“完整页面”版本以适当的布局在此处运行它。 – Barmar

回答

1

使用type="text"而非type="date"输入字段。当您使用type="date"时,浏览器将控制原始输入字段的格式,该字段会覆盖日期选择器的dateFormat选项;它不

$(document).ready(function() { 
 
    $('#myDate').datepicker({ 
 
    changeMonth: true, 
 
    changeYear: true, 
 
    dateFormat: 'm/d/y', 
 
    shortYearCutoff: '69', 
 
    yearRange: '1970:2069' 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/> 
 

 
<input id="myDate" name="myDate" type="text" value="" />

+0

感谢您的回答。更改'type =“text”'后,我遇到了同样的问题。 – Neolisk

+0

它适合我。如果我输入'3/31/69',我将在2069年3月31日获得。如果我输入'3/31/70',我将获得1970年3月31日。 – Barmar

+0

69个作品没有问题。这只是在1970年至1986年的年份范围内,看起来一切都变成了1970年。 – Neolisk

1

TL; DRshortYearCutoff必须是整数,我把它作为一个字符串。 jQueryUI datepicker在这种情况下默默地忽略它。对我的代码进行以下更改对于使其工作是必需的。

$(document).ready(function() { 
    $('#myDate').datepicker({ 
    changeMonth: true, 
    changeYear: true, 
    dateFormat: 'm/d/y', 
    shortYearCutoff: 69, //integer is important, string will get ignored 
    yearRange: '1970:2069' 
    }); 
}); 

Fixed JSFiddle

以下是中的相关代码块jQueryUI.js

_getFormatConfig: function(inst) { 
    //... 
    shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : 
     new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));   
    //return ... 
}, 

我想将它会检查值是否可被分析为整型,那么这将是更内嵌JavaScript的类型不太精神的正确途径。留下jQueryUI团队的决定。

+1

好的。我很惊讶这是一个问题 - 如果它只作为一个数字有意义,我希望它可以在内部进行转换。 JavaScript通常会自行处理这个问题,但它取决于它与之相比的确切程度。 – Barmar