获取下一个收集日期,但考虑到公共假日

时间:2018-05-05 11:54:29

标签: php date search calendar days

我正在组织一个快速的下一个收集日期检查器,可以做一点帮助!

基本上,我们总是在周五收集,但仅限于一年中的奇数周。唯一的例外是如果它是一个包含英国公共/银行假日的一周 - 在这种情况下,收集将在星期六。

这是我到目前为止所拥有的 -

$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 :(得分: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") ));

...

我认为最好的近似之一是使用现有库或使用 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());
}
?> 

希望它有所帮助!