jQuery。NETMVC3。日期选择器错误?
我的问题是。为什么只有在我选择8月和9月的签入日期时才会出现此错误 我有一个项目使用ASP.NETMVC3,并使用jQuery作为日期选择器。假设我的视图中有3个文本框,分别名为jQuery。NETMVC3。日期选择器错误?,jquery,jquery-ui,Jquery,Jquery Ui,我的问题是。为什么只有在我选择8月和9月的签入日期时才会出现此错误 我有一个项目使用ASP.NETMVC3,并使用jQuery作为日期选择器。假设我的视图中有3个文本框,分别名为CheckIn\u Date、CheckOut\u Date(这两个文本框使用日期选择器)和Days 当我设置天数=3时,然后选择签入日期=2012-01-01,我的签出日期将自动计算天数,并将该值设置为2012-01-03 一切如我所料,直到我在签入日期中选择2012-08-01并将天数设置为3我的签入日期值不是201
CheckIn\u Date
、CheckOut\u Date
(这两个文本框使用日期选择器)和Days
当我设置天数=3时,然后选择签入日期=2012-01-01,我的签出日期将自动计算天数,并将该值设置为2012-01-03
一切如我所料,直到我在签入日期中选择2012-08-01并将天数设置为3我的签入日期值不是2012-08-04,而是2012-12-04。只有在我选择8月和9月的签入日期时才会发生这种情况。选择任何其他月份,都会给我结账日期的期望值
这是我的密码:
$("input[data-datepicker='true']").change(function () {
var id = $(this).attr("name");
var days = parseInt($("#maxProgramDays").val());
//var o = new Date();
var val = $(this).val();
var s = val.split("-");
var x = [];
var thisDate = new Date();
thisDate.setFullYear(parseInt(s[0]), parseInt(s[1]) - 1, parseInt(s[2]));
//alert(thisDate.toDateString())
if (id == "Reservation[0].CheckIn_Date") {
thisDate.setDate(thisDate.getDate() + days);
x['year'] = thisDate.getFullYear();
x['month'] = m2d(thisDate.getMonth() + 1);
x['day'] = m2d(thisDate.getDate());
$("input[name='Reservation[0].CheckOut_Date']").val(x['year'] + '-' + x['month'] + '-' + x['day']);
//alert(thisDate.toDateString())
}
if (id == "Reservation[0].CheckOut_Date") {
thisDate.setDate(thisDate.getDate() - days);
x['year'] = thisDate.getFullYear();
x['month'] = m2d(thisDate.getMonth() + 1);
x['day'] = m2d(thisDate.getDate());
$("input[name='Reservation[0].CheckIn_Date']").val(x['year'] + '-' + x['month'] + '-' + x['day']);
//alert(thisDate.toDateString())
}
以下是我的看法:
<div class="display-label">Program Days</div>
<div class="display-field"><span id="pDays"></span></div>
<div class="editor-label">@Html.LabelFor(model => model.Reservation[0].CheckIn_Date)</div>
<div class="editor-field reserveDate">
@Html.Datepicker("Reservation[0].CheckIn_Date", "")
@Html.ValidationMessageFor(model => model.Reservation[0].CheckIn_Date)
</div>
<div class="editor-label">@Html.LabelFor(model => model.Reservation[0].CheckOut_Date)</div>
<div class="editor-field reserveDate">
@Html.Datepicker("Reservation[0].CheckOut_Date", "")
@Html.ValidationMessageFor(model => model.Reservation[0].CheckOut_Date)
</div>
节目日
@Html.LabelFor(model=>model.Reservation[0]。签入日期)
@Html.Datepicker(“预订[0]。签入日期”,“”)
@Html.ValidationMessageFor(model=>model.Reservation[0]。签入日期)
@Html.LabelFor(model=>model.Reservation[0]。签出日期)
@Html.Datepicker(“预订[0]。签出日期”,“”)
@Html.ValidationMessageFor(model=>model.Reservation[0]。签出日期)
问题出在这个世界上。当您在thisDate.setFullYear(parseInt(s[0])、parseInt(s[1])-1、parseInt(s[2])中指定日期为2010-08-01时,就会出现这种情况代码>函数,parseInt(s[1])
在运行时看起来像parseInt(“08”)
,而这里出错了
parseInt(“08”)返回0,这与parseInt(“09”)
原因
parseInt('08')和parseInt('09')都返回零,因为函数试图确定所用数字系统的正确基数。在Javascript中,以零开头的数字被视为八进制,八进制中没有08或09,因此出现了问题
如何修复它
要解决这个问题,只需为parseInt添加第二个参数,即用于转换的基。正确的调用应该是parseInt(“08”,10)和parseInt(“09”,10)
因此,您的代码将成为
thisDate.setFullYear(parseInt(s[0], 10), parseInt(s[1], 10) - 1, parseInt(s[2], 10));
这对您很有用。什么是m2d
?它是一个自定义javascript函数吗?很抱歉迟了回复,是的,m2d是类似于函数m2d(m){var x;if(parseInt(m)<10){x='0'+m;}否则{x=m;}返回x;}+1的函数,找到了有趣的解决方案。是工作解决方案,已更新控件的id。