jQuery。NETMVC3。日期选择器错误?

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

我的问题是。为什么只有在我选择8月和9月的签入日期时才会出现此错误

我有一个项目使用ASP.NETMVC3,并使用jQuery作为日期选择器。假设我的视图中有3个文本框,分别名为
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。