Google Script - Функция - Не определено

У меня есть следующий скрипт, который используется для распределения каждого месяца как 1/12 числа года и нахождения разницы между двумя датами. Например, функция суммирует январь-июнь как 50% года вместо 49% (181/365). Я хотел бы переместить свои Excel с / с в Google, но не могу заставить эту функцию работать в Google Script.

Сценарий Excel

Function PartMonths(x, y)

PartMonths = (DateDiff("M", (DateSerial(Year(x), Month(x) + 1, 1) - 1), 
(DateSerial(Year(y), Month(y) + 1, 1) - 1) + 1) - 2 + Day(y) / 
Day(DateSerial(Year(y), Month(y) + 1, 1) - 1) + (Day(DateSerial(Year(x), 
Month(x) + 1, 1) - 1) - Day(x) + 1) / Day(DateSerial(Year(x), Month(x) + 1, 
1) - 1)) / 12

End Function

Google Script

function PartMonths(x, y) 

{ return PartMonths =(DateDif((Date(Year(x), Month(x) + 1, 1)), 
(Date(Year(y), Month(y) + 1, 1) - 1) + 1,"M") - 1 + Day(y) / 
 Day(Date(Year(y), Month(y) + 1, 1) - 1) + (Day(Date(Year(x), Month(x) + 1,
 1) - 1) - Day(x) + 1) / Day(Date(Year(x), Month(x) + 1, 1)-1))
 }

x и y - даты, которые являются переменными. При отладке кода в Google Scripts он говорит: "ReferenceError: "DateDif"не определен"

Я не уверен, как это определить? Помогите!

1 ответ

Javascript сохраняет дату в миллисекундах с 01.01.1970

// fd final date JavaScript object date
// fi Initial date  JavaScript object date
// Return date difference in fraction of day
function DateDif (fd,id){
  var dayms=24*3600*1000;
  return ( fd.valueof()-fi.valueof())/dayms;
}

Однако, если вы восстановите даты валютирования из gsheet или excel. Достаточно, если вы вернете fd-fi, поскольку excel кодирует в днях, а после точки - это доля дня

Для определения функции используйте

function DateDif(arg){
   //Add here what should DateDif do

   return something // something is the object reference to be returned by the function
                    // but you could use a literal like an integer, string or other 
                    // primitives

}

Ссылка