PHP 日期间隔。回到年初

PHP DateInterval. Go back to the beginning of the year

我想写一个方法,我可以给出一个时间段(比如:每年,每月......),它 returns 根据给定的这段时间给我一个更早的日期。

这是我的代码:

public function callRuleCeilling($period)
    {
        $start = new \DateTime();

        switch ($period) {
            case 'weekly':
                $dateInterval = 'P7D';
                break;
            case 'monthly':
                $dateInterval = 'P1M';
                break;
            case 'quaterly':
                $dateInterval = 'P3M';
                break;
            case 'half-yearly':
                $dateInterval = 'P6M';
                break;
            case 'yearly':
                $dateInterval = 'P1Y';
                break;
            default:
                $dateInterval = 'P1Y';
        }
        $start->sub(new \DateInterval($dateInterval));   

        return $start    
    }

我的示例问题:

如果我把一个开始日期放在年中,并加上一个年度。我希望它在年初停止。

而且我希望每个月都一样(在月初停止)等...

是否存在 PHP 功能?我找不到。

请突出显示我。

感谢您的关注。它让我以这种方式死去:

public function callRuleCeilling($period)
    {

        $start = new \DateTime();
        $month = 'January';

        switch ($period) {
            case 'weekly':
                $timestampMonday = strtotime('last monday', strtotime('tomorrow'));
                $start = $start->setTimestamp($timestampMonday);
                break;
            case 'monthly':
                $month = $start->format('F');
                $start = new \DateTime('first day of '.$month);
                break;
            case 'quaterly':
                $monthNumber = $start->format('n');
                if($monthNumber >= 1) $month = 'January';
                if($monthNumber >= 5) $month = 'May';
                if($monthNumber >= 9) $month = 'September';
                $start = new \DateTime('first day of '.$month);
                break;
            case 'half-yearly':
                $monthNumber = $start->format('n');
                if($monthNumber >= 1) $month = 'January';
                if($monthNumber >= 7) $month = 'July';
                $start = new \DateTime('first day of '.$month);
                break;
            case 'yearly':
                $start = new \DateTime('first day of January');
                break;
            default:
                $start = new \DateTime('first day of January');
        }

        return $start;
    }