2012-05-14 12 views
8

yo escribimos esta pieza de código con el fin de mostrar los actuales fecha + 2 meses:fecha actual + 2 meses

<?php 
    $date = date("d/m/Y"); 
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months"); 
    $date = date("d/m/Y",$date); 
    echo $date; 
?> 

No parece que trabajar ya que muestra: 01/03/1970.

¿Qué estoy haciendo mal?

Gracias por su ayuda.

EDIT:

Después de leer los comentarios y respuestas, he simplificado y corregí.

<?php 
    $date = date("d/m/Y", strtotime(" +2 months")); 
    echo $date; 
?> 
+0

Intenta poner un espacio antes de tu '+ 2'. Y tal vez use dos variables: usar el mismo nombre de variable una y otra vez para diferentes tipos de datos es confuso y una mala práctica. – Crontab

+0

La correcta comprobación del valor de retorno ayuda también. – hakre

Respuesta

21

Te estás perdiendo el segundo argumento a favor de la segunda strtotime() llamada:

echo date('d/m/Y', strtotime('+2 months')); 
+1

Tenga mucho cuidado al usar strotime. El 31 de julio, date ('dmY') produce "31072014" mientras que date ('dmY', strotime ('- 1 month')) produce "01072014" (esperaba "30062014"). – AaL

3

Trate de usar el DateTime object:

$date = new DateTime("+2 months"); 
echo $date->format("d/m/Y"); 
+1

Correcto, pero no relevante para el caso. –

+0

¿Por qué esta respuesta no es relevante? Sólo curiosidad @StanislavShabalin –

+0

@MuhammadIbnuh Para ser sincero, no puedo recordarlo ni resolverlo cinco años después :-) Tal vez porque por qué usar 'DateTime' cuando ya tienes' strtotime' y está bien solo arreglar un error tipográfico como en la respuesta aceptada. –

1

Si hoy es "AAAA-MM-31" y el próximo mes no tiene el día 31, que mostrará el próximo mes de ese día, haga que el sistema muestre el resultado "+3 meses" en lugar del resultado "+2 meses".

así que supongo que esto es lo más seguridad:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now"))))); 

cambiar la fecha al primer día de la primera.

Cuestiones relacionadas