Пользовательский тег или код, чтобы определить, является ли определенная дата праздником
Мне нужно выяснить, относится ли конкретная дата к празднику, например, к Дню памяти, Дню труда, Дню благодарения, Пасхе и т. Д. Однако эти праздники плавают в зависимости от недели месяца или дня недели. Я уверен, что есть код для этого, поэтому я бы не хотел изобретать велосипед.
В частности, у меня будет дата, когда что-то произойдет, и я хочу добавить информацию об этой дате или сделать дополнительные вещи (например, добавить дополнительную оплату), если событие происходит в праздничный день. Как то так, но на каждый федеральный праздник
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):
Ответ 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