不能选择BC年

时间:2013-12-11 00:46:52

标签: javascript jquery-ui datepicker

我正在开展一个需要处理日期BC(例如100BC或2000BC)以及2014AC等的项目。

在Datepicker的API文档中,声明可以使用javascript minDate对象设置maxDateDate(具有最小和最大aprox {{在1970年的任何一方都有3年}。

似乎无法在不列颠哥伦比亚省或甚至在1/1/99之前设定年份。

$("#date").datepicker({
    dateFormat: 'dd-mm-yy',
    showButtonPanel: true,
    changeMonth: true,
    changeYear: true,
    yearRange: '0:2010',
    inline: true });

我如何超越此限制?

3 个答案:

答案 0 :(得分:0)

您需要自己实施一个新的日期选择器。 09/04/1752不存在。

http://www.genealogytoday.com/columns/everyday/030902.html

尝试在jquery网站上的datepicker中输入该日期。

http://jqueryui.com/datepicker/

干杯。

答案 1 :(得分:0)

我认为根本问题是数学/逻辑错误。最初,当出现年份下拉列表时,它显示19,当前为年份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),则会导致问题。

构建年份下降的逻辑似乎需要一些帮助。您可以在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>

我认为仍然存在一个099的问题,与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;
        }
    }

答案 2 :(得分:-2)

你无法使用B.C.无论如何,我们现在的日历因为他们使用了儒略历。尝试将我们的日期转换为朱利安,看看它是否有效。