谷歌脚本 - 功能 - 未定义

时间:2018-04-03 13:25:56

标签: javascript google-apps-script google-sheets user-defined-functions custom-function

我有以下脚本用于每月分配为1/12年,并找出2个日期之间的差异。例如,函数将1月到6月的总和作为一年的50%而不是49%(181/365)。我想将我的excel s / s移到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脚本

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“未定义”

我不确定如何定义它?救命啊!

2 个答案:

答案 0 :(得分:0)

定义功能使用

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

}

参考

答案 1 :(得分:0)

Javascript自1970年1月1日以来以毫秒为单位保存日期

// 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在几天之内编码后,点是一天的一小部分之后便是