在Google表格中查看日期是否为假期

时间:2017-04-28 03:37:46

标签: javascript google-apps-script google-sheets

我从以下网站借用/修改了以下脚本。 这个脚本也没有以原始形式工作......从语法上讲它应该可以正常工作,但由于某种原因,Date()函数会一直失败......

http://qiita.com/kamatama_41/items/be40e05524530920a9d9

我的问题是它在谷歌电子表格中无效。我对主要问题有以下看法。

  • 无法正确设置endDate,它总是如下所示。

  • 它不被识别为工作表中的自定义功能。 ie = isJapaneseHolidy(somedate)不被认可。

日志:

[17-04-28 12:34:19:357 JST] Starting execution
[17-04-28 12:34:19:364 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 12:34:19:364 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 12:34:19:401 JST] CalendarApp.getCalendarById([ja.japanese#holiday@group.v.calendar.google.com]) [0.035 seconds]
[17-04-28 12:34:19:424 JST] Calendar.getEvents([Wed Dec 31 16:00:00 PST 1969, Wed Dec 31 16:00:00 PST 1969]) [0.022 seconds]
[17-04-28 12:34:19:425 JST] Execution succeeded [0.062 seconds total runtime]

功能:

function main() {
  Logger.log(isJapaneseHoliday(2017,5,3)); 
}

function isJapaneseHoliday(year, month, day) {   
  var startDate = new Date(year,month-1,day,0,0,0);
  Logger.log(startDate);
  var endDate = new Date(year,month-1,day,23,59,59,999);
  Logger.log(endDate);

  var cal=CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
  var holidays =  cal.getEvents(startDate, endDate);

  return holidays.length != 0; 
}

以前有没有人经历过这个?

修改

如果我使用值代替变量作为日期,我会得到有效的回报。

请参阅下面我使用var startDate = new Date(2012,12,12,0,0,0,0)进行测试的第一个Logger.log输出。

[17-04-28 13:01:42:098 JST] Starting execution
[17-04-28 13:01:42:107 JST] Logger.log([Wed Dec 12 00:00:00 GMT+09:00 2012, []]) [0 seconds]
[17-04-28 13:01:42:108 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 13:01:42:141 JST] CalendarApp.getCalendarById([ja.japanese#holiday@group.v.calendar.google.com]) [0.032 seconds]
[17-04-28 13:01:42:142 JST] Calendar.getEvents([Tue Dec 11 07:00:00 PST 2012, Wed Dec 31 16:00:00 PST 1969]) [0 seconds]
[17-04-28 13:01:42:146 JST] Execution failed: Event start time must be before event end time. (line 12, file "Code") [0.038 seconds total runtime]

EDIT2:

正如Jack Brown提到的,我需要运行main()函数才能使其正常工作......我正在执行isJapaneseHoliday功能。默认情况下没有输入。

另外有人提到GoogleSheets和GoogleCalendar不允许彼此访问......必须有办法......

EDIT3:

Jack Brown回答了我的问题,我现在面临着不同的问题,但由于无法进行身份验证,我正在创建一个自定义菜单并为其添加功能。

https://developers.google.com/apps-script/guides/menus

但是,对于那些试图在您的脚本中使用公共日历的人,请注意,显然他们(或至少是日本假日日历)在PST / PDT中输入并且它使输出显示不正确...我尚未知道它是否会影响结果。

EDIT4:

我刚刚验证过,它似乎不会影响结果,它只显示PST / PDT时区作为getEvents()函数输入的时间,输出似乎正常工作。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用cal.getEvents(startDate, endDate),而不是使用cal.getEventsForDay(date)。代码可以修改为:



function main() {
  Logger.log(isJapaneseHoliday(2017,5,3)); 
}

function isJapaneseHoliday(year, month, day) {   
  var date = new Date(year,month-1,day);
  Logger.log(date);

  var cal=CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
  var holidays =  cal.getEventsForDay(date);

  return holidays.length != 0; 
}