2016-03-06 3 views
-1

У меня есть сценарий javascript, который должен определить дату, основанную на двух параметрах: дата, в которую вводит пользователь, которая передается в параметр 'date', и количество дней, которое должно быть вне первый параметр.Функция Возвращаемое значение

Функция хорошо работает до оператора возврата. Оператор return возвращает «null». Я пытаюсь выяснить, что я делаю неправильно в своем синтаксисе, чтобы вернуть обновленное значение даты. Помоги пожалуйста.

function calcDate(date, holdDays){ 

     var expirationDate = null; 
     var validDate = noWeekendsOrHolidays(date); //jqueryui datepicker 

     if(holdDays != 0){ 
      date.setDate(date.getDate() + 1); 

      if(validDate[0] == true){ 
       calcDate(date, holdDays - 1) 
      } else { 
       calcDate(date, holdDays) 
      } 

     } else{ 
      expirationDate = moment(date); 
      return expirationDate; 
     } 
     return expirationDate; 
    } 

var expirationDate = calcDate("3/7/2016",3) //expect 3/10/2016 
+0

FYI, я также попытался заменить первый возврат внутри блока else, чтобы вернуть true; и вернуть false; Опять же, просто не знаю, где я здесь ошибся. – JuanTrev

+4

'expirationDate' устанавливается только в том случае, если выполняется последнее' '' '' '' '' '' '' ', которое происходит только в' holdDays === 0'. – forgivenson

+0

Вместо добавления сложности с moment.js, почему бы просто не передать фактическую дату в calcDate()? Как и в, 'calcDate (новая дата (2016, 03, 07), 3);' –

ответ

0

я, возможно, решен путем установки значения переменного в начале блока кода и изменений, если заявление (@forgivenson, поставить некоторые мысли после прочтения вашего комментария выше).

function calcDate(date, holdDays){ 
    var expirationDate = date; 
    var validDate = noWeekendsOrHolidays(date); 
    if(holdDays != 0 || validDate[0] == false){ //recursive call will apply OR weekend/holiday 
     date.setDate(date.getDate() + 1); 
     if(validDate[0] == true){ 
      calcDate(date, holdDays - 1) //decrement holdDays and make recursive call 
     } 
     else{ 
      calcDate(date, holdDays) //recursive call (weekend/holiday) 
     } 
    } 
    return expirationDate; 
} 
Смежные вопросы