Функции даты в JavaScript - PullRequest
0 голосов
/ 29 июля 2010

У меня проблемы со следующим кодом 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 ())

Код должен делать следующее:

  • Пользователь меняет поле со списком на месяц (выбран текущий месяц), а значение поля со списком является относительным индексом (например, в этом месяце июль, в мае будет -2)
  • Функция fetchMaand будет вызываться в событии onchange.

Мой реальный вопрос на этот вопрос - «Почему дата где-то в 2015 году?». Ват, я делаю неправильно в этом коде?

Спасибо!

Yvan

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Не на 100% уверен, что это поможет, но я бы изменил:

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

на

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

Также @Tim верен: вы должны это сделать setDate(1) до ударяя месяцы вперед или назад.

0 голосов
/ 29 июля 2010

Не уверен, что это ваша проблема, но я знаю, что начинать с текущей даты в JavaScript и затем устанавливать месяц - не всегда хорошая идея. Например, если текущая дата 31 января и вы добавляете 1 к месяцу, вы пойдете сразу после февраля и марта. Этот результат (март на месяц раньше января) часто не тот, который вы хотите.

Я действительно не знаю из того, что вы опубликовали, что должен делать ваш код, поэтому я не уверен, является ли это частью проблемы. Но, в частности, похоже, что вы пытаетесь установить дату первого числа следующего месяца (по крайней мере, когда monthsAhead равен 1). Вызов setMonth до setDate не сделает этого (в моем примере это произойдет 1 марта. Было бы лучше сделать setDate до setMonth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...