Пользовательский тег или код, чтобы определить, является ли определенная дата праздником

Мне нужно выяснить, относится ли конкретная дата к празднику, например, к Дню памяти, Дню труда, Дню благодарения, Пасхе и т. Д. Однако эти праздники плавают в зависимости от недели месяца или дня недели. Я уверен, что есть код для этого, поэтому я бы не хотел изобретать велосипед.

В частности, у меня будет дата, когда что-то произойдет, и я хочу добавить информацию об этой дате или сделать дополнительные вещи (например, добавить дополнительную оплату), если событие происходит в праздничный день. Как то так, но на каждый федеральный праздник

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

Кстати, кто-нибудь знает рабочий URL для библиотеки пользовательских тегов CF, или они убили это?

1 ответ

Вы можете получить доступ и кешировать фид Google Calendar US Holiday. Вам необходимо зарегистрироваться для получения бесплатного ключа API. "FullCalendar" содержит инструкции по созданию учетной записи Calendar для использования с JS, но вы можете использовать CF для использования JSON после его настройки.

http://fullcalendar.io/docs/google_calendar/

Просмотрите исходный и серверный JSON-ответ на этой странице с помощью инструментов разработчика браузера F12:

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, который вы получите, будет содержать массив "items", содержащий информацию о праздниках и даты в формате 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 в качестве ключей (гггг-ММ-ДД), и иметь значение, представляющее собой массив имен выходных, Возможно, вы захотите расширить это, чтобы обозначить, является ли это федеральным "оплачиваемым" праздником или нет, так как я не верю, что 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 я понял, что написал UDF GetGoogleHolidays годом ранее. (UDF выбирает данные JSON для выходных в США с помощью API Календаря Google, создает структуру с ключами YYYYMMDD, которая содержит массив имен выходных и кэширует их в течение 24 часов.)

http://gamesover2600.tumblr.com/post/104768724954/fetch-holiday-dates-from-google-calendar-api-using

Другие вопросы по тегам