добавить один год в datetime с php

$data['user']['time'] = '2011-03-07 00:33:45'; 

как мы можем добавить 1 год к этой дате?

что-то вроде $newdata = $data['user']['time'] + 1 year ?

или

 $newdata = 2012-03-07 00:33:45 

благодаря

Адам Рамадхан

strtotime() – это функция, которую вы ищете:

 $data['user']['seal_data'] = date('Ymd H:i:s', strtotime('+1 year', strtotime($data['user']['time']))); 

Во-первых, вы должны преобразовать MySQL datetime в то, что PHP может понять. Есть два способа сделать это …

  1. Используйте UNIX_TIMESTAMP() в вашем запросе, чтобы сообщить MySQL вернуть UNIX_TIMESTAMP() времени в столбце datetime .

     SELECT whatever, UNIX_TIMESTAMP(myTime) AS 'myUnixTime' FROM myTable; 
  2. Используйте DateTime::createFromFormat чтобы преобразовать время строки в то, что может понять PHP.

     $date = DateTime::createFromFormat('Ymd H:i:s', $data['user']['time']); 

Как только это будет сделано, вы сможете работать со временем … В зависимости от метода, который вы использовали выше, вы можете использовать одно из следующего.

  1. Если у вас есть временная метка unix, вы можете использовать следующее, чтобы добавить год:

     $inAYear = strtotime('+1 year', $data['user']['unixTime']); 
  2. Если у вас есть объект DateTime , вы можете использовать следующее:

     $inAYear = $date->add(new DateInterval('P1Y')); 

Теперь, чтобы отобразить дату в формате, который является респектабельным, вы должны сказать PHP, чтобы он вернул строку в соответствующем формате.

  1. Если у вас есть временная метка unix, вы можете использовать следующее:

     $strTime = date('Ymd H:i:s', $inAYear); 
  2. Если у вас есть объект DateTime , вы можете использовать следующее:

     $strTime = $inAYear->format('Ymd H:i:s'); 

Кроме того, если вы не хотите иметь дело со всем этим, вы можете просто добавить один год при запросе.

 SELECT whatever, DATE_ADD(myTime, INTERVAL 1 YEAR) AS 'inAYear' FROM myTable; 

Я думаю, вы могли бы использовать strtotime (), чтобы сделать это довольно легко. Что-то вроде:

 $newdata = date('c', strtotime($data['user']['time'] . ' +1 year')); 

Хотя строка формата «c» отличается от формата ввода. Вы можете проконсультироваться с документами date () для того, как построить правильный.

«Ymd H: i: s», как предлагает Тим ​​Купер, выглядит корректно.

Это должно сделать трюк (не проверено).

 $data = "2011-03-07 00:33:45"; echo 'Original date +1 year: ' . date('Ymd H:i:s', strtotime(date("Ymd H:i:s", strtotime($data)) . " +1 year")); 

Текущая (2017) практика заключается в использовании DateTime

Этот вопрос стоит на google-поиске для «php datetime add one year», но сильно устарел . Хотя большинство предыдущих ответов будут работать нормально в большинстве случаев, установленный стандарт должен использовать для этого объекты DateTime , в первую очередь из-за strtotime требующих тщательной манипуляции strtotime и DST.

TL; DR

  1. Преобразовать в DateTime : $date = new DateTime('2011-03-07 00:33:45', [user TZ]);
  2. Используйте DateTime :: modify : $date->modify('+1 year');
  3. Формат для потребностей.
    • Измените часовой пояс с помощью DateTime :: setTimezone из списка поддерживаемых часовых $date->setTimezone(new DateTimeZone('Pacific/Chatham')); : $date->setTimezone(new DateTimeZone('Pacific/Chatham'));
    • Преобразование в строку с форматом DateTime :: format : echo $date->format('Ymd H:i:s');

Следуя этой схеме для манипулирования датами и временем, вы будете обрабатывать наихудшие странности часового пояса / времени DST / прыжка.

Просто запомните две последние заметки:

  • Жизнь проще с вашим часовым поясом в UTC .
  • НИКОГДА не изменяйте системный часовой пояс вне файлов конфигурации.
    • Я видел слишком много кода, который зависит от date_default_timezone_set . Если вы это сделаете, остановитесь. Сохраните часовой пояс в переменной и передайте его вокруг своего приложения, пожалуйста .

Подробнее Чтение

Как рассчитать разницу между двумя датами с помощью PHP?

Конвертировать формат даты yyyy-mm-dd => dd-mm-yyyy

PHP – strtotime, укажите часовой пояс