1

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

这是我的代码:

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函数?我找不到它。

请突出我。

4

1 回答 1

0

谢谢你的亮点。它允许我这样做:

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;
    }
于 2015-09-23T14:34:02.170 回答