2012-05-14 3 views
8

Ho scritto questo pezzo di codice al fine di visualizzare la data corrente + 2 mesi:Data corrente + 2 mesi

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

Non sembra funzionare in quanto visualizza: 1970/01/03.

Cosa sto sbagliando?

Grazie per il vostro aiuto.

EDIT:

Dopo aver letto i commenti e le risposte, ho semplificato e corretto esso.

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

Prova a mettere uno spazio prima di '+ 2'. E magari usare due variabili: usare sempre lo stesso nome di variabile per diversi tipi di dati è confusa e cattiva pratica. – Crontab

+0

Anche il corretto controllo del valore di ritorno è d'aiuto. – hakre

risposta

21

Stai perdendo il secondo argomento per il secondo strtotime() chiamata:

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

Fai attenzione quando usi lo strotime. Il 31 luglio, data ('dmY') restituisce "31072014" mentre data ('dmY', strotime ('- 1 mese')) restituisce "01072014" (mi aspettavo "30062014"). – AaL

3

Provare a utilizzare il DateTime object:

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

Corretto ma non pertinente al caso. –

+0

Perché questa risposta non è pertinente? Solo curioso @StanislavShabalin –

+0

@MuhammadIbnuh Per essere onesto, non riesco a ricordarlo o capirlo cinque anni dopo :-) Forse perché perché usare 'DateTime' quando hai già' strtotime' e va bene correggere un errore di battitura come nella risposta accettata. –

1

Se oggi è "AAAA-MM-31" e il mese prossimo non ha il 31 ° giorno, mostrerà il prossimo mese di quel giorno, farà sì che il sistema visualizzi il risultato "+3 mesi" anziché "+2 mesi".

quindi credo che questo è il più sicurezza:

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

Cambiare la data al 1 ° giorno prima.