Получить следующую дату сбора, но с учетом государственных праздников

Я собираю небольшую проверку даты следующей коллекции и могу помочь с небольшой помощью!

По сути, мы всегда собираем по пятницам, но только в нечетные недели года. Единственное исключение из этого было бы, если бы это была неделя, в которой был государственный / банковский выходной в Великобритании — в этих случаях сбор был бы в субботу.

Вот что у меня так далеко —

$weekNumber = date("W");
$thisfriday = new DateTime();
$thisfriday->modify('this friday');
$nextfriday = new DateTime();
$nextfriday->modify('this friday +1 weeks');
if($weekNumber &1) {
echo $thisfriday->format('l d F');
} else {
echo $nextfriday->format('l d F');
}

Есть ли какие-нибудь советы по выходным дням?

Спасибо!

0

Решение

Если вы делаете собственный php-календарь, вы должны сделать это вручную, создавая массив банковских праздников, может быть, это полезно для вас: https://en.wikipedia.org/wiki/List_of_holidays_by_country .

В официальной документации PHP есть скрипт для получения выходных в британском банке в год (проверьте здесь: http://php.net/manual/en/ref.calendar.php):

function calculateBankHolidays($yr) {

$bankHols = Array();

// New year's:
switch ( date("w", strtotime("$yr-01-01 12:00:00")) ) {
case 6:
$bankHols[] = "$yr-01-03";
break;
case 0:
$bankHols[] = "$yr-01-02";
break;
default:
$bankHols[] = "$yr-01-01";
}

// Good friday:
$bankHols[] = date("Y-m-d", strtotime( "+".(easter_days($yr) - 2)." days", strtotime("$yr-03-21 12:00:00") ));

...

Я думаю, что одним из лучших приближений было бы использовать существующая библиотека или используя ГРУША пакет (http://pear.php.net/package/Date_Holidays), а затем вы можете сделать что-то вроде (изменить Германию на Великобританию):

 <?php
require_once "Date/Holidays.php";
$germany = &Date_Holidays::factory('Germany', 2004, 'en_EN');
if (Date_Holidays::isError($germany)) {
die('Factory was unable to produce driver-object');
}
$easter = &$germany->getHoliday('easter', 'de_DE');
if (!Date_Holidays::isError($easter)) {
print_r($easter->toArray());
}
?>

Надеюсь, поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector