我遇到以下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())
代码应该执行以下操作:
我真正的问题是关于这个问题“为什么2015年的某个日期?”。我在这段代码中做错了吗?
谢谢!
伊凡
答案 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。