2010-01-02 12 views
61

Tengo una fecha en este formato:Fecha menos 1 año?

2009-01-01 

¿Cómo puedo devolver la misma fecha, pero antes 1 año?

+0

No se olvide que atender el problema semántico de lo que entendemos por "un año" w.r.t. siguiente años bisiestos. Restar 365 días del 2008-02-28 le dará el 27-02-2002, mientras que restar 365 días del 2008-02-29 le dará el 2007-03-31. – HostileFork

+0

Supongo que depende mucho de lo que signifique "restar un año". Puede querer decir el mismo mes y día, pero un año antes o el mes y el día después de restar 365 días, como señala Hostile. –

Respuesta

96

Puede utilizar strtotime:

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

La función strtotime devuelve una marca de tiempo Unix, para obtener una cadena con formato puede utilizar date:

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

Uso strtotime (función):

$time = strtotime("-1 year", time()); 
    $date = date("Y-m-d", $time); 
8
// 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); 
31

Utilizando el objeto DateTime ...

$time = new DateTime('2099-01-01'); 
$newtime = $time->modify('-1 year')->format('Y-m-d'); 

O usando ahora para hoy

$time = new DateTime('now'); 
$newtime = $time->modify('-1 year')->format('Y-m-d'); 
12

una manera más fácil que he usado y funcionaba bien

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

esto funcionó perfecto .. Espero que esto ayude a alguien más también ... :)

0

Puede usar el siguiente ng función para restar 1 o cualquier año de una fecha.

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

Y mirando ejemplos anteriores también se puede utilizar el

$user_age_min = "-"."1"; 
echo date('Y-m-d', strtotime($user_age_min.'year')); 
Cuestiones relacionadas