我的问题是.为什么只有在8月和9月选择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())
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
<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>
Run Code Online (Sandbox Code Playgroud)
问题出在这个世界上。当您在thisDate.setFullYear(parseInt(s[0]), parseInt(s[1]) - 1, parseInt(s[2]));函数中将日期指定为 2010-08-01 时,parseInt(s[1])运行时看起来像这样parseInt("08"),但这里出错了
parseInt("08")返回Zero ,与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));
Run Code Online (Sandbox Code Playgroud)
这对你有用。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |