Не забывайте уделять внимание семантическому вопросу о том, что вы имеете в виду под «одним годом» по сравнению с високосным годом. Вычитание 365 дней из 2008-02-28 даст вам 2007-02-28, а вычитание 365 дней из 2008-02-29 даст вам 2007-03-31.
HostileFork говорит, что не доверяйте SE
Я предполагаю, что это очень сильно зависит от того, что означает «вычитание года». Вы можете иметь в виду тот же месяц и день, но годом ранее, или месяц и день после вычитания 365 дней, как указывает Враждебный.
// set your date here
$mydate = "2009-01-01";
/* strtotime accepts two parameters.
The first parameter tells what it should compute.
The second parameter defines what source date it should use. */
$lastyear = strtotime("-1 year", strtotime($mydate));
// format and display the computed dateecho date("Y-m-d", $lastyear);
Ответы:
Вы можете использовать
strtotime
:$date = strtotime('2010-01-01 -1 year');
strtotime
Функция возвращает метку времени Unix, чтобы получить отформатированную строку , вы можете использоватьdate
:echo date('Y-m-d', $date); // echoes '2009-01-01'
источник
Используйте функцию strtotime ():
$time = strtotime("-1 year", time()); $date = date("Y-m-d", $time);
источник
Использование объекта DateTime ...
$time = new DateTime('2099-01-01'); $newtime = $time->modify('-1 year')->format('Y-m-d');
Или использую сейчас на сегодня
$time = new DateTime('now'); $newtime = $time->modify('-1 year')->format('Y-m-d');
источник
самый простой способ, который я использовал и хорошо работал
date('Y-m-d', strtotime('-1 year'));
это сработало отлично .. надеюсь, это поможет и кому-то другому .. :)
источник
// set your date here $mydate = "2009-01-01"; /* strtotime accepts two parameters. The first parameter tells what it should compute. The second parameter defines what source date it should use. */ $lastyear = strtotime("-1 year", strtotime($mydate)); // format and display the computed date echo date("Y-m-d", $lastyear);
источник
На моем веб-сайте, чтобы проверить, достигли ли регистрирующиеся люди 18 лет , я просто использовал следующее:
$legalAge = date('Y-m-d', strtotime('-18 year'));
После сравните только две даты.
Надеюсь, это может кому-то помочь.
источник
Хотя есть много приемлемых ответов на этот вопрос, я не вижу примеров
sub
метода, использующего\Datetime
объект: https://www.php.net/manual/en/datetime.sub.phpИтак, для справки, вы также можете использовать a
\DateInterval
для изменения\Datetime
объекта:$date = new \DateTime('2009-01-01'); $date->sub(new \DateInterval('P1Y')); echo $date->format('Y-m-d');
Что возвращает:
2008-01-01
Для получения дополнительной информации
\DateInterval
обратитесь к документации: https://www.php.net/manual/en/class.dateinterval.phpисточник
Вы можете использовать следующую функцию для вычитания 1 или любых лет из даты.
function yearstodate($years) { $now = date("Y-m-d"); $now = explode('-', $now); $year = $now[0]; $month = $now[1]; $day = $now[2]; $converted_year = $year - $years; echo $now = $converted_year."-".$month."-".$day; } $number_to_subtract = "1"; echo yearstodate($number_to_subtract);
И глядя на приведенные выше примеры, вы также можете использовать следующие
$user_age_min = "-"."1"; echo date('Y-m-d', strtotime($user_age_min.'year'));
источник