Получить следующую дату сбора, но с учетом государственных праздников - PullRequest
0 голосов
/ 05 мая 2018

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

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

Вот что у меня есть -

$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');
}

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

Спасибо!

1 Ответ

0 голосов
/ 05 мая 2018

Если вы делаете собственный 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") ));

...

Я думаю, что одним из лучших приближений было бы использование существующей библиотеки или использование пакета PEAR (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());
}
?> 

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

...