Javascript日期函数

时间:2010-07-29 13:32:59

标签: javascript datetime

我遇到以下JavaScript代码问题。我在评论中编写了正在发生的事情:

function fetchMaand() {
    var dteBegin, dteEnd, clsDate, monthsAhead;
    monthsAhead = $('#dteMaand').val(); // dteMaand's value = -3 for example
    clsDate = new Date(); // Current time
    clsDate.setMonth(clsDate.getMonth() + monthsAhead); // Here it starts doing weird (date is somewhere in 2015 ??)
    clsDate.setDate(1);
    dteBegin = formatBIN(clsDate);
    clsDate.setDate(30);
    dteEind = formatBIN(clsDate);
    $.get("jsexec/agenda_array_gebeurtenissen.cfm", {
        begindatum : dteBegin,
        einddatum  : dteEind
    } , fillMaandBox);
}

function fillMaandBox(result) {
    // Handle data
}

function formatBIN(date) {
    return date.getFullYear() + "-" + to2(date.getMonth() + 1) + "-" + to2(date.getDate())
}

function to2(i) {
    return  ("00" + i).substr(("00" + i).length - 2 , 2);
}
你可以帮帮我吗?这是我的日历网站的一部分,我试图用月份(dteMaand)制作组合框,如果你对该组合进行了更改,则调用第一个函数(fetchMaand())

代码应该执行以下操作:

  • 用户用一个月(当前月份被选中)更改组合框,组合框的值是相对索引(例如,本月是7月,5月将是-2)
  • 函数fetchMaand将在onchange事件中调用。

我真正的问题是关于这个问题“为什么2015年的某个日期?”。我在这段代码中做错了吗?

谢谢!

伊凡

2 个答案:

答案 0 :(得分:1)

不是100%肯定这会有所帮助,但我会改变:

monthsAhead = $('#dteMaand').val();

monthsAhead = parseInt($('#dteMaand').val(), 10);

同样@Tim是正确的:你应该在向前或向后碰撞月份之前执行setDate(1)

答案 1 :(得分:0)

不确定这是否是您的问题,但我知道从JavaScript中的当前日期开始,然后设置月份并不总是一个好主意。例如,如果当前日期是1月31日,并且您在该月加1,那么您将从2月到3月。这个结果(1月份之前的一个月)通常不是你想要的。

我真的不知道你发布了什么代码应该做什么,所以我不能确定这是否是问题的一部分。但特别是看起来你正试图将日期设置为下个月的第一天(至少当monthsAhead为1时)。在setDate之前调用setMonth不会这样做(在我的例子中它会给出March 1。你最好在setMonth之前做setDate。