您可以访问和缓存 Google Calendar US Holiday feed。您需要注册一个免费的 API 密钥。“FullCalendar”有关于建立一个日历帐户以使用 w/JS 的说明,但是一旦配置好,您就可以使用 CF 来使用 JSON。
http://fullcalendar.io/docs/google_calendar/
使用浏览器开发人员 F12 工具查看此页面上的源和服务器 JSON 响应:
http://fullcalendar.io/js/fullcalendar-2.5.0/demos/gcal.html
您将使用的 URL 如下所示(但使用您自己的 API 密钥):
https://www.googleapis.com/calendar/v3/calendars/usa__en@holiday.calendar.google.com/events?key=AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE
您返回的 JSON 响应将有一个“项目”数组,其中包含假日信息和 ISO8601 格式的日期。
"items": [
{
"kind": "calendar#event",
"etag": "\"2778476758000000\"",
"id": "20140101_60o30dr46oo30c1g60o30dr4ck",
"status": "confirmed",
"htmlLink": "https://calendar.google.com/calendar/event?eid=MjAxNDAxMDFfNjBvMzBkcjQ2b28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
"created": "2014-01-09T03:32:59.000Z",
"updated": "2014-01-09T03:32:59.000Z",
"summary": "New Year's Day",
"creator": {
"email": "usa__en@holiday.calendar.google.com",
"displayName": "Holidays in United States",
"self": true
},
"organizer": {
"email": "usa__en@holiday.calendar.google.com",
"displayName": "Holidays in United States",
"self": true
},
"start": {
"date": "2014-01-01"
},
"end": {
"date": "2014-01-02"
},
"transparency": "transparent",
"visibility": "public",
"iCalUID": "20140101_60o30dr46oo30c1g60o30dr4ck@google.com",
"sequence": 0
}
]
我建议保存 API 响应数据(这样您就可以在本地重用它而不必依赖远程 API)并使用 ISO8601 日期作为键 (yyyy-MM-DD) 生成一个结构,并将值设为假日名称数组. 您可能想要扩展它以表示它是否是联邦“带薪”假期,因为我不相信 Google Calendar API(或任何假期日期库)会为您识别它。
Holidays = {
"2015-12-31" = ["New Year's Eve"],
"2016-01-01" = ["New Year's Day"]
}
然后使用这样的东西作为你的逻辑:
holidayNames = '';
if (StructKeyExists(Holidays, DateFormat(theDate, "yyyy-MM-DD"))){
holidayNames = ArrayToList(Holidays[DateFormat(theDate, "yyyy-MM-DD")]);
}
更新在搜索基于 ColdFusion 的库时,我意识到我在一年前写了一个 GetGoogleHolidays UDF。(UDF 使用 Google Calendar API 获取美国假日 JSON 数据,生成一个带有 YYYYMMDD 键的结构,其中包含一组假日名称,并将其缓存 24 小时。)
http://gamesover2600.tumblr.com/post/104768724954/fetch-holiday-dates-from-google-calendar-api-using