PHP DateInterval. Вернуться к началу года

Я хотел бы написать метод, который я могу дать период времени (например, год, месяц …), и он возвращает мне предварительную дату в соответствии с этим периодом времени.

Вот мой код:

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 с этим? Я не могу найти это.

Пожалуйста, выделите меня.

1

Решение

Спасибо за основной момент. Это позволило мне сделать так:

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;
}
0

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

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

По вопросам рекламы [email protected]