弹出日历Datepicker错误/ 12月12月为00并在年份中添加一个数字

时间:2013-12-20 19:24:47

标签: javascript calendar datepicker

我们的网站上有日历功能,可让人们预订。用户可以看到日历,但日期会以CIM(签入月份),CID(入住当天)和CIY(入住年份)的形式传递给预订窗口小部件,并具有可比较的退房日期。

在我们收到12月份之前,所有人都使用了脚本。似乎第12个月将作为月份“00”传递给预订小部件。我只能看到传递给表单的字段一次。 12/26/2013和12/27/2013分别于2014年6月26日和2014年7月27日通过。

我暂时在网站的主要页面上找到了一个更基本的预订小部件,直到可以修复,因此客户仍然可以预订房间。不幸的是,我是一名js newbee,我与这个项目合作的公司本周只有一个骷髅队员。我不知道这可能是什么问题。 [第12个月以00为准,2013年12月为2014年。]

你能看看This web page upon which I've kept the broken script吗?您不能使用已经过的日期,Inn将于1月1日至16日关闭,因此这些日期将无效。如果你在2014年尝试任何其他日期,它应该有效,除非你到了12月,它已经坏了。

我唯一能在网上找到帮助的是this post没有解决方案。

可以将某些内容添加到js / tcal.js或我的预订小部件中的现有代码中,如果CIM =“00”或者如果COM =“00”则转换为get_month应该改名为“12”?完全不确定脚本在第一个例子中可能在2013年增加了一年。

1 个答案:

答案 0 :(得分:0)

JavaScript的Date对象有点不一致:

月份范围从0到11
日期范围从1到31

对于12月,你将12传递给setMonth(),它超出了月份的范围1.额外的1是增加下一个值的行,即。年。

您可以将get_nights()更改为减月,然后在pop_fields()中增加月份,以便显示的月份范围为1 - 12

    function get_nights(date_array){
    var check_in_date = new Date();
    var check_out_date = new Date();
    var check_in_month = parseInt(date_array[0]) - 1;
    var check_out_month = parseInt(date_array[3]) - 1;
    check_in_date.setFullYear(date_array[2]);
    check_in_date.setMonth(check_in_month);
    check_in_date.setDate(date_array[1]);
    check_out_date.setFullYear(date_array[5]);
    check_out_date.setMonth(check_out_month);
    check_out_date.setDate(date_array[4]);
    pop_fields(check_in_date,check_out_date);
}

function pop_fields(check_in,check_out){
var in_month = String(check_in.getMonth() + 1);
    var in_date = String(check_in.getDate());
    var out_month = String(check_out.getMonth() + 1);
    var out_date = String(check_out.getDate());
    document.getElementById('CIM').value = (in_month.length == 1) ? ('0' + in_month) : in_month;
    document.getElementById('CID').value = (in_date.length == 1) ? ('0' + in_date) : in_date;
    document.getElementById('CIY').value = check_in.getFullYear();
    document.getElementById('COM').value = (out_month.length == 1) ? ('0' + out_month) : out_month;
    document.getElementById('COD').value = (out_date.length == 1) ? ('0' + out_date) : out_date;
    document.getElementById('COY').value = check_out.getFullYear();
}

Mozilla开发者网络在Date object page

上有一个很好的解释和一些这种不直观行为的例子