Nie zapomnij zająć się semantycznym zagadnieniem, co masz na myśli przez „jeden rok” w odniesieniu do lat przestępnych. Odejmując 365 dni od 2008-02-28 otrzymasz 2007-02-28, a odejmując 365 dni od 2008-02-29 otrzymasz 2007-03-31.
HostileFork mówi, że nie ufaj SE
Myślę, że to w dużej mierze zależy od tego, co oznacza „odjęcie roku”. Możesz mieć na myśli ten sam miesiąc i dzień, ale rok wcześniej lub miesiąc i dzień po odjęciu 365 dni, jak wskazuje Wrogie.
// 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);
Chociaż istnieje wiele akceptowalnych odpowiedzi w odpowiedzi na to pytanie, nie widzę żadnych przykładów submetody wykorzystującej \Datetimeobiekt: https://www.php.net/manual/en/datetime.sub.php
Tak więc, w celach informacyjnych, możesz również użyć a, \DateIntervalaby zmodyfikować \Datetimeobiekt:
$date = new \DateTime('2009-01-01');
$date->sub(new \DateInterval('P1Y'));
echo $date->format('Y-m-d');
Odpowiedzi:
Możesz użyć
strtotime
:$date = strtotime('2010-01-01 -1 year');
strtotime
Zwraca znacznik czasu Uniksa, aby uzyskać sformatowany ciąg można użyćdate
:echo date('Y-m-d', $date); // echoes '2009-01-01'
źródło
Użyj funkcji strtotime ():
$time = strtotime("-1 year", time()); $date = date("Y-m-d", $time);
źródło
Korzystanie z obiektu DateTime ...
$time = new DateTime('2099-01-01'); $newtime = $time->modify('-1 year')->format('Y-m-d');
Lub używając teraz na dziś
$time = new DateTime('now'); $newtime = $time->modify('-1 year')->format('Y-m-d');
źródło
najłatwiejszy sposób, z którego korzystałem i działał dobrze
date('Y-m-d', strtotime('-1 year'));
to zadziałało idealnie .. mam nadzieję, że to pomoże komuś innemu .. :)
źródło
// 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);
źródło
Na mojej stronie, aby sprawdzić, czy rejestrujące się osoby mają 18 lat , użyłem po prostu:
$legalAge = date('Y-m-d', strtotime('-18 year'));
Następnie porównaj tylko te dwie daty.
Mam nadzieję, że to może komuś pomóc.
źródło
Chociaż istnieje wiele akceptowalnych odpowiedzi w odpowiedzi na to pytanie, nie widzę żadnych przykładów
sub
metody wykorzystującej\Datetime
obiekt: https://www.php.net/manual/en/datetime.sub.phpTak więc, w celach informacyjnych, możesz również użyć a,
\DateInterval
aby zmodyfikować\Datetime
obiekt:$date = new \DateTime('2009-01-01'); $date->sub(new \DateInterval('P1Y')); echo $date->format('Y-m-d');
Który zwraca:
2008-01-01
Więcej informacji na temat
\DateInterval
można znaleźć w dokumentacji: https://www.php.net/manual/en/class.dateinterval.phpźródło
Możesz użyć następującej funkcji, aby odjąć 1 lub dowolne lata od daty.
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);
Patrząc na powyższe przykłady, możesz również użyć następujących
$user_age_min = "-"."1"; echo date('Y-m-d', strtotime($user_age_min.'year'));
źródło