1

我需要弄清楚某个特定日期是否属于假期,例如阵亡将士纪念日、劳动节、感恩节、复活节等。但是,这些假期会根据月份或星期几浮动。我确信有代码可以做到这一点,所以我不想重新发明轮子。

具体来说,如果事件发生在假期,我将有一个发生某事的日期,并希望添加有关该日期的信息,或者做一些额外的事情(例如增加额外的工资)。像这样,但对于每个联邦假期:

if ( month( date ) == 9 && day( date ) < 8 && DayOfWeek( date ) == 2 ) {
    holiday = 'labor day';
}

顺便说一句,有没有人知道 CF 自定义标签库的工作 URL,还是他们杀了它?

4

1 回答 1

4

您可以访问和缓存 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

于 2015-12-18T17:19:31.763 回答