getMonth не распознает даты

Так что мой документ googledocs со следующими 2 функциями в javascript:

function test(date) {
 return date.getMonth()+1 
}

function hours_monthly(target_month, target_year,  date_range, hour_range) {
  r = 0;
  for (i = 0; i < date_range.length ; i++){
    if (target_month == date_range[i].getMonth() +1 && date_range[i].getYear() - 2000 == target_year ){
       r += hour_range[i]
    }
  }
  return r
}

Теперь я хочу использовать код. В то время как функция test просто отлично читает месяц любой заданной даты, назначая «= test(C9)» ячейке. Где C9-ячейка, которой присвоена дата 6/9/16.

Если использовать второй funtion, он говорит, что не может найти функцию getMonth() той же самой даты C9 и просто выдает ошибку. Более точно это говорит:

«не удается найти функцию getMonth () в Вт 06 сентября 2016 00:00:00 GTM +0200»

date_range-массив дат, hour_range-массив целых чисел.
Проблема porbably лежит где-то в использовании массивов.

Та же проблема возникает при выполнении сравнений:

function test2(date1, date2) {
  if (date1 > date2) {
    return 1
  }
  else {
   return 2 
  }


function hours_period(start_date, end_date, date_range, hour_range){
  r = 0;
  t = 0;
  for (i = 0; i < date_range.length; i++){
    if ( (date_range[i] >= start_date)  && (date_range[i] <= end_date) ){
       t += 1
       r += hour_range[i] 
    }

  }
  return [t, r]
}

Теперь снова функция test2 работает полностью хорошо, но как только я подаю массив (date_range), он перестает работать, в этом случае он не дает ошибку, вместо этого он просто выводит [0.0] независимо от того, сколько дат остро соответствуют if-оператор

1 ответ

  1. Вы передаете дату как строку, а строка не имеет метода getMonth.

    Исправьте это, обернув дату в новую дату(date)

    function test(date) {
    	// I wrap the new date you pass with new Date(date)
     return new Date(date).getMonth()+1; 
    }
    
    function hours_monthly(target_month, target_year,  date_range, hour_range) {
      r = 0;
      for (i = 0; i < date_range.length ; i++){
        if (target_month == date_range[i].getMonth() +1 && date_range[i].getYear() - 2000 == target_year ){
           r += hour_range[i]
        }
      }
      return r
    }
    
    console.log(test("6/9/16"));