我正在从事一个项目,需要处理日期公元前(例如公元前100BC,或公元前2000年)以及2014AC等。
在Datepicker的API文档中,声明可以使用javascript Date对象来设置minDate和maxDate (在1970年的两侧具有aprox 285,616年份的最小和最大值)。
在公元前,甚至在1/1/99年之前,似乎不可能设定年份。
$("#date").datepicker({
dateFormat: 'dd-mm-yy',
showButtonPanel: true,
changeMonth: true,
changeYear: true,
yearRange: '0:2010',
inline: true });我怎样才能超过这个限制呢?
发布于 2013-12-11 10:20:18
您将需要自己实现一个新的datepicker。09/04/1752不存在。
http://www.genealogytoday.com/columns/everyday/030902.html
尝试在jquery网站上的datepicker中输入该日期。
http://jqueryui.com/datepicker/
干杯。
发布于 2019-11-08 10:38:19
我认为根本问题是一个数学/逻辑错误。最初,当year下拉菜单出现时,它显示19,当前为year 2019。切换到1492,一切正常。切换到666,一切正常。切换到121,一切正常。切换到99...啊哦,现在是1999年了。
您可以在此处进行测试:
$(function() {
$("#datepicker").datepicker({
dateFormat: 'dd/mm/yy',
showButtonPanel: true,
changeMonth: true,
changeYear: true,
yearRange: 'c-22019:c+1',
inline: true
});
});<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Date: <input type="text" id="datepicker"></p>
如果您试图返回到公元100年以下的任何值,如-1或公元前1,这将导致问题。
看起来构建年份下拉列表的逻辑需要一些帮助。您可以在BC中选择日期,但很难从范围中找到日期。需要对其进行一点研究,并在以后更新。
更新
我用一种不同于所使用的逻辑来看待yearRange。要获得所需的结果,最好基于当前年份格式c-nn:c+nn进行工作。
$(function() {
$("#datepicker").datepicker({
dateFormat: 'dd/mm/yy',
showButtonPanel: true,
changeMonth: true,
changeYear: true,
yearRange: '-2000:2020',
inline: true
});
var oldD = new Date();
oldD.setYear(-1);
$("#datepicker").datepicker("option", "defaultDate", oldD);
});<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Date: <input type="text" id="datepicker"></p>
仍然有一个0到99的问题,我认为这与Date假设并在19传递到它时添加它有关。我认为这可以通过使用Date对象来解决,但在jQuery UI代码的这一部分中没有做到这一点:
// Year selection
if ( !inst.yearshtml ) {
inst.yearshtml = "";
if ( secondary || !changeYear ) {
html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
} else {
// determine range of years to display
years = this._get( inst, "yearRange" ).split( ":" );
thisYear = new Date().getFullYear();
determineYear = function( value ) {
var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :
( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) :
parseInt( value, 10 ) ) );
return ( isNaN( year ) ? thisYear : year );
};
year = determineYear( years[ 0 ] );
endYear = Math.max( year, determineYear( years[ 1 ] || "" ) );
year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );
endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );
inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
for ( ; year <= endYear; year++ ) {
inst.yearshtml += "<option value='" + year + "'" +
( year === drawYear ? " selected='selected'" : "" ) +
">" + year + "</option>";
}
inst.yearshtml += "</select>";
html += inst.yearshtml;
inst.yearshtml = null;
}
}发布于 2015-02-12 07:02:26
您无论如何都不能将B.C.与我们当前的日历一起使用,因为它们使用的是儒略历。尝试将我们的日期转换为Julian,看看是否有效。
https://stackoverflow.com/questions/20508432
复制相似问题