2017-01-13 6 views
0

Так что мой GoogleDocs документ со следующими 2 функции в JavaScript:getMonth оленья кожа признать даты

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 (C9)». Где C9 - ячейка, на которую назначена дата 6/9/16.

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

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

DATE_RANGE массив дат, hour_range представляет собой массив целых чисел , Проблема заключается в том, что проблема заключается в использовании массивов.

Та же проблема arrises при выполнении сравнениях:

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-statement

+0

Может ли вы предоставить доступ к файлу образец, в том числе сценария? Сделайте копию своего файла и замените конфиденциальные данные тестовыми данными? –

ответ

0

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

Фикса его обертка дата в новой Дате (дате)

function test(date) { 
 
\t // 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"));

+0

Ну, да, это решило проблему, хотя, как сказано, тестовая функция уже работает просто отлично. – Ryanless

+0

Обратите внимание, что разбор строк с конструктором Date не рекомендуется, вы должны вручную проанализировать его с помощью функции или библиотеки на заказ. – RobG

Смежные вопросы