首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery。ASP.NET MVC 3.数据报错?

jQuery。ASP.NET MVC 3.数据报错?
EN

Stack Overflow用户
提问于 2012-01-18 08:38:19
回答 1查看 352关注 0票数 5

我的问题是。为什么这个错误只发生在我在八月和九月选择CheckIn_Date的时候?

我有一个使用ASP.NET MVC 3和jQuery作为数据选择器的项目。假设我的视图中有3个文本框,名为CheckIn_DateCheckOut_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的期望。

这是我的代码:

代码语言:javascript
复制
$("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())
    }

以下是我的看法:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)

所以你的代码会变成

代码语言:javascript
复制
thisDate.setFullYear(parseInt(s[0], 10), parseInt(s[1], 10) - 1, parseInt(s[2], 10));

这对你有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8907256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档