2012-04-12 14 views
5

Escribí esta pieza de códigoPHP fecha strtotime no trabajar

echo date("Y-m-d", strtotime($date, strtotime("+ " . $days . " days"))); 

$date = 2012-04-12 
$days = 15 

Busco añadir $days (15 días) de la fecha (2012-04-12) Estoy esperando para obtener 2012-04-27 y este código me retornos 2012-04-12, ¿Qué estoy haciendo mal?

Respuesta

8
echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12'))); 
+0

Gracias, justo lo que estaba buscando :) – user979331

0

¿Por qué no usar la clase DateTime?

$date = new DateTime(); 
$date->add(new DateInterval('P15D')); 
1
echo date("Y-m-d", strtotime("+$days days", $date)); 
5

No utilice strtotime(). No es confiable, aunque en realidad no estás haciendo nada que realmente te vuelva a morder en la grupa. Pero dependiendo de strtotime todavía es algo malo, porque hará que tu vida sea miserable en algún momento.

Uso DateTime lugar:

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12'); 
$then = $now->add(new DateInterval('P15D')); 
$date = $then->format('Y-m-d'); 
+6

'strtotime()' no es poco confiable; de hecho, la clase DateTime lo usa debajo de las hojas. –

+0

Sí, si eres el autodetección. Pero si tienes una fecha de formato conocido, entonces no uses strtotime en absoluto. –

+2

Estoy de acuerdo con usted en principio, Marc, pero cuestiono la necesidad de crear un objeto para hacer algo tan trivial. Si él iba a hacer cambios de zona horaria u otras operaciones más avanzadas, sí, use el objeto, absolutamente. ¿Simplemente agregar unos días? Meh. –

2
$date = '2012-04-12'; 
$days = 15; 
echo date('Y-m-d', strtotime("$date +$days days")); 
1

Su sintaxis es incorrecta. No es necesario ni útil colocar el código en una sola línea. En este caso, vemos que tratar de hacerlo causa problemas de sintaxis. ¡No tengas miedo de un par de pequeñas variables extra!

$date = '2012-04-12'; 
$days = 15; 

$ts = strtotime($date); 
$new_ts = strtotime('+'.$days.' days', $ts); 
$new_date = date('Y-m-d', $new_ts); 

Claro, fácil de leer, fácil de depurar. Si te gusta código de campo, se puede poner en una línea, pero hay una forma más clara de escribirlo:

$new_date = date (
    'Y-m-d', 
    strtotime (
     '+'.$days.' days', 
     strtotime($date) 
    ) 
); 

Documentación