UI DatePicker无法正确显示公元100年前日期的问题求助
解决jQuery UI Datepicker解析早于100年日期显示错误的问题
这个问题其实是jQuery UI Datepicker的两个默认行为导致的:一是默认日期格式可能用了两位年份(yy),二是两位数年份的解析规则会把小数值年份映射到19xx区间。下面给你几个针对性的解决办法:
1. 强制使用四位年份的日期格式
确保配置里指定四位年份格式,这样输入和显示都会用四位年份,从根源避免解析混乱:
$(document).ready(function() { $("#fromDatePickerEnabled_input").datepicker({ yearRange: '1:9999', dateFormat: 'dd/mm/yyyy', // 用yyyy表示四位年份,替换默认的yy changeYear: true // 可选,让年份下拉框支持大范围选择 }); });
2. 修改两位数年份的解析规则
如果需要兼容两位数年份输入,同时正确解析远古年份,可以调整shortYearCutoff选项,把它设为极小值(比如0),这样所有两位数年份都会被解析为公元后对应年份(比如输入01会变成0001而不是1901):
$(document).ready(function() { $("#fromDatePickerEnabled_input").datepicker({ yearRange: '1:9999', dateFormat: 'dd/mm/yy', // 保留两位年份格式 shortYearCutoff: 0, // 关键配置:两位数年份统一解析为00xx changeYear: true }); });
3. 开启按钮面板辅助选择远古年份
开启showButtonPanel选项后,用户可以通过面板按钮快速定位年份,也能直接输入四位年份,操作更灵活:
$(document).ready(function() { $("#fromDatePickerEnabled_input").datepicker({ yearRange: '1:9999', dateFormat: 'dd/mm/yyyy', changeYear: true, showButtonPanel: true }); });
额外注意
- 尽量使用较新版本的jQuery UI,旧版本对极早年份的支持可能存在bug;
- 输入日期时优先用四位年份格式(比如
01/01/0001),减少歧义; - 如果仍有问题,可以手动指定
minDate明确范围,比如minDate: new Date(1, 0, 1)(对应公元1年1月1日)。
内容的提问来源于stack exchange,提问作者Caznik




