$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 может понять. Есть два способа сделать это …
Используйте UNIX_TIMESTAMP()
в вашем запросе, чтобы сообщить MySQL вернуть UNIX_TIMESTAMP()
времени в столбце datetime
.
SELECT whatever, UNIX_TIMESTAMP(myTime) AS 'myUnixTime' FROM myTable;
Используйте DateTime::createFromFormat
чтобы преобразовать время строки в то, что может понять PHP.
$date = DateTime::createFromFormat('Ymd H:i:s', $data['user']['time']);
Как только это будет сделано, вы сможете работать со временем … В зависимости от метода, который вы использовали выше, вы можете использовать одно из следующего.
Если у вас есть временная метка unix, вы можете использовать следующее, чтобы добавить год:
$inAYear = strtotime('+1 year', $data['user']['unixTime']);
Если у вас есть объект DateTime
, вы можете использовать следующее:
$inAYear = $date->add(new DateInterval('P1Y'));
Теперь, чтобы отобразить дату в формате, который является респектабельным, вы должны сказать PHP, чтобы он вернул строку в соответствующем формате.
Если у вас есть временная метка unix, вы можете использовать следующее:
$strTime = date('Ymd H:i:s', $inAYear);
Если у вас есть объект 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"));
Этот вопрос стоит на google-поиске для «php datetime add one year», но сильно устарел . Хотя большинство предыдущих ответов будут работать нормально в большинстве случаев, установленный стандарт должен использовать для этого объекты DateTime , в первую очередь из-за strtotime
требующих тщательной манипуляции strtotime
и DST.
$date = new DateTime('2011-03-07 00:33:45', [user TZ]);
$date->modify('+1 year');
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
: $date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Ymd H:i:s');
Следуя этой схеме для манипулирования датами и временем, вы будете обрабатывать наихудшие странности часового пояса / времени DST / прыжка.
Просто запомните две последние заметки:
Как рассчитать разницу между двумя датами с помощью PHP?
Конвертировать формат даты yyyy-mm-dd => dd-mm-yyyy
PHP – strtotime, укажите часовой пояс