Дата мінус 1 рік?


91

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

2009-01-01

Як повернути ту саму дату, але на 1 рік раніше?


3
Не забудьте схилятися до семантичної проблематики того, що ви маєте на увазі під терміном "один рік" у високосні роки. Віднімання 365 днів від 28.02.2008 дасть вам 28.02.2007, тоді як віднімання 365 днів від 29.02.2008 дасть вам 31.03.2007.
HostileFork каже, що не довіряє SE

Я думаю, що це дуже залежить від того, що означає "віднімання року". Ви можете мати на увазі той самий місяць і день, але на рік раніше, або місяць і день після віднімання 365 днів, як зазначає ворожий.
D.Shawley

Відповіді:


130

Ви можете використовувати strtotime:

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

strtotimeФункція повертає мітку часу Unix, щоб отримати отформатированную рядок , ви можете використовувати date:

echo date('Y-m-d', $date); // echoes '2009-01-01'

99

Використовуйте функцію strtotime ():

  $time = strtotime("-1 year", time());
  $date = date("Y-m-d", $time);

51

Використання об'єкта 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');

31

найпростіший спосіб, яким я користувався і добре працював

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'));

Після, порівняйте лише дві дати.

Сподіваюся, це могло комусь допомогти.


2

Хоча на це запитання є багато прийнятних відповідей, я не бачу прикладів 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'));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.