Дата минус 1 год?

91

У меня дата в таком формате:

2009-01-01

Как мне вернуть ту же дату, но на год раньше?

Эйси
источник
3
Не забывайте уделять внимание семантическому вопросу о том, что вы имеете в виду под «одним годом» по сравнению с високосным годом. Вычитание 365 дней из 2008-02-28 даст вам 2007-02-28, а вычитание 365 дней из 2008-02-29 даст вам 2007-03-31.
HostileFork говорит, что не доверяйте SE
Я предполагаю, что это очень сильно зависит от того, что означает «вычитание года». Вы можете иметь в виду тот же месяц и день, но годом ранее, или месяц и день после вычитания 365 дней, как указывает Враждебный.
D.Shawley 02

Ответы:

132

Вы можете использовать strtotime:

$date = strtotime('2010-01-01 -1 year');

strtotimeФункция возвращает метку времени Unix, чтобы получить отформатированную строку , вы можете использовать date:

echo date('Y-m-d', $date); // echoes '2009-01-01'
Кристиан К. Сальвадо
источник
101

Используйте функцию strtotime ():

  $time = strtotime("-1 year", time());
  $date = date("Y-m-d", $time);
Alex
источник
52

Использование объекта 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');
Дарренв
источник
32

самый простой способ, который я использовал и хорошо работал

date('Y-m-d', strtotime('-1 year'));

это сработало отлично .. надеюсь, это поможет и кому-то другому .. :)

Саадк
источник
9
// 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);
Нирмал
источник
6

На моем веб-сайте, чтобы проверить, достигли ли регистрирующиеся люди 18 лет , я просто использовал следующее:

$legalAge = date('Y-m-d', strtotime('-18 year'));

После сравните только две даты.

Надеюсь, это может кому-то помочь.

Меломан
источник
3

Хотя есть много приемлемых ответов на этот вопрос, я не вижу примеров 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

Оливер Таппин
источник
-3

Вы можете использовать следующую функцию для вычитания 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'));

источник