我的问题是。为什么这个错误只发生在我在八月和九月选择CheckIn_Date的时候?
我有一个使用ASP.NET MVC 3和jQuery作为数据选择器的项目。假设我的视图中有3个文本框,名为CheckIn_Date、CheckOut_Date (这两个文本框使用datepicker)和Days。
当我设置Days =3时,然后选择CheckIn_Date = 2012-01-01,我的CheckOut_Date将自动计数天数,并将值设置为2012-01-03。
一切都如我所料,直到我在我的CheckIn_Date中选择2012-08-01并设置Days = 3。我的CheckOut_Date值不是2012-08-04,而是2012-12-04。只有在我在8月和9月选择CheckIn_Date时才会发生。选择其他任何一个月给我我对我的CheckOut_Date的期望。
这是我的代码:
$("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>发布于 2012-01-18 09:11:54
问题出在这个世界上。当您指定日期为2010-08-01时,在您的thisDate.setFullYear(parseInt(s[0]), parseInt(s[1]) - 1, parseInt(s[2]));函数中,运行时的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));这对你有用。
https://stackoverflow.com/questions/8907256
复制相似问题