无法选择公元前年份
Posted
技术标签:
【中文标题】无法选择公元前年份【英文标题】:Cannot select years BC 【发布时间】:2013-12-28 19:03:31 【问题描述】:我正在处理一个需要处理 BC 日期(例如 100BC 或 2000BC)以及 2014AC 等的项目。
在 Datepicker 的 API 文档中,声明 minDate
和 maxDate
可以使用 javascript Date
对象设置(在 1970 的任一侧都有 aprox 285,616 的最小值和最大值) .
似乎不可能在 BC 甚至 99 年 1 月 1 日之前设置年份。
$("#date").datepicker(
dateFormat: 'dd-mm-yy',
showButtonPanel: true,
changeMonth: true,
changeYear: true,
yearRange: '0:2010',
inline: true );
我怎样才能超过这个限制?
【问题讨论】:
您是否尝试设置 minDate 和 maxDate 然后相应地更新 yearRange? 如果您将 yearRange 中的第一年设置为足够远的时间,这似乎很好:jsfiddle.net/j08691/wLUpU @j08691 即使在您的示例中,也无法选择日期 1/2/70 例如。另外,请注意在您设置的年份范围内 -3000 并且下拉菜单显示 -987。这里显然有一个问题。更不用说,如果您保持下拉列表不变,它会选择 2013 作为日期(选择日期,然后单击编辑并再次选择,而不使用年份下拉列表..哎呀!) 可能重复:***.com/questions/1122989/… 查看这个答案:***.com/questions/25846123/… 【参考方案1】:您需要自己实现一个新的日期选择器。 09/04/1752 不存在。
http://www.genealogytoday.com/columns/everyday/030902.html
尝试在 jquery 网站上的日期选择器中输入该日期。
http://jqueryui.com/datepicker/
干杯。
【讨论】:
您应该提供一些证据说明为什么不可能(正如您所暗示的那样)。另外,我并不真正关心这个特定的日期,但感谢您指出这一点。有趣的故事 我做到了。第一个链接清楚地解释了“不列颠群岛和包括美国在内的所有英国殖民地损失了 11 天——9 月 3 日到 13 日”。也许您会很幸运地找到另一个可以解决此问题的日历。祝你好运。显然 jQuery Datepicker 没有考虑到这一点,因此在此之前的任何日期都将被取消。如果您在 unix 终端上键入“cal 1752”,您可以看到 cal 程序解决了这个问题。这可能是一个开始的地方 我没有解决您不关心这个日期的其他问题。我认为您应该这样做,因为在此之前的所有日期都将至少休息 11 天。因此,您的工作日名称将不匹配。如果您不需要这些,那就不用担心。 我还应该补充一点,您的位置可能会有所作为。 “虽然这些天在 1752 年在英国土地上消失了,但在其他地方,一些数字已经消失了——1582 年的法国、1584 年的奥地利和 1700 年的挪威。”【参考方案2】:我认为根本问题是数学/逻辑错误。最初,当年份下拉出现时,它显示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 选择一个日期,但很难从该范围内到达那里。需要研究一下,稍后再更新。
更新
我正在查看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;
【讨论】:
【参考方案3】:您将无法使用 B.C.无论如何,我们目前的日历,因为他们使用儒略历。尝试将我们的日期转换为 Julian,看看它是否有效。
【讨论】:
以上是关于无法选择公元前年份的主要内容,如果未能解决你的问题,请参考以下文章