2013-09-04 2 views
1

Что является лучшим способом добавить к существующей дате 1 год и удалить 1 день. Так что если сегодняшняя дата 04/09/2013, я хотел бы иметь новую дату 03/09/2014. Существует также выпуск каждые 4 года, год 366 дней вместо 365 и, конечно, он должен изменить месяц, если дата начала 01/09/2013, тогда дата окончания должна быть 31/08/2014. Пожалуйста помоги. Мои поля даты выглядят так. Думаю, мне нужно что-то делать с mktime или временем?Добавить 1 год в день и минус 1 день в то же время

$renewalDate = date('d F Y', strtotime($rows['CoverStartDate'])); 
+0

Означает ли это из базы данных, если да, то какой? –

ответ

5

DateTime() приходится на високосные годы:

// PHP 5.2+ 
$dt = new DateTime($rows['CoverStartDate']); 
$dt->modify('+1 year'); 
$dt->modify('-1 day'); 
$renewalDate = $dt->format('d F Y'); 

или:

// PHP 5.3+ 
$dt = new DateTime($rows['CoverStartDate']); 
$dt->add(new DateInterval('P1Y')); 
$dt->sub(new DateInterval('P1D')); 
$renewalDate = $dt->format('d F Y'); 

или:

// PHP 5.5+ 
$renewalDate = (new DateTime('04/09/2013'))->add(new DateInterval('P1Y')) 
              ->sub(new DateInterval('P1D')) 
              ->format('d F Y'); 
+0

это работает !! очень хорошо – user974435

3

Попробуйте с:

$modificator = ' +1 year -1 day'; 
$renewalDate = date('d F Y', strtotime($rows['CoverStartDate'] . $modificator)); 
0

Взгляните на то, что StrToTime можно сделать:

<?php 
echo strtotime("now"), "\n"; 
echo strtotime("10 September 2000"), "\n"; 
echo strtotime("+1 day"), "\n"; 
echo strtotime("+1 week"), "\n"; 
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; 
echo strtotime("next Thursday"), "\n"; 
echo strtotime("last Monday"), "\n"; 
?> 

(взяты с официального PHP manual).

В вашем случае:

$renewalDate = date('d F Y', strtotime($rows['CoverStartDate'])); 
$desiredDate = date('d F Y', strtotime("{$renewalDate} + 1 year - 1 day")); 
echo $date; 

Пример, который я попробовал себя это:

$date = date("d F Y"); 
$date = strtotime("{$date} + 1 year - 1 day"); 
$date = date("d F Y",$date); 
echo $date; 

и выходы 3 сентября 2014, который является правильным.

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

Смежные вопросы