2012-12-20 13 views
7

Sto cercando di ottenere il mese, sei mesi fuori dalla data corrente.Aggiungi sei mesi in php

Ho provato con:

date('d', strtotime('+6 month', time()));

Ma non sembra funzionare, restituisce sempre 01. C'è un modo migliore per farlo?

Grazie!

+0

Per inciso, 'strtotime () 'usa l'ora corrente per impostazione predefinita se si omette il secondo parametro. Inoltre, non penso che 'strtotime()' calcolerà i mesi poiché non è un periodo di tempo assoluto, ad es. il numero di giorni varia di mese in mese. –

risposta

18

Trovo lavorare con DateTime molto più facile da usare:

$datetime = new DateTime(); 
$datetime->modify('+6 months'); 
echo $datetime->format('d'); 

o

$datetime = new DateTime(); 
$datetime->add(new DateInterval('P6M')); 
echo $datetime->format('d'); 

o in PHP versione 5.4+

echo (new DateTime())->add(new DateInterval('P6M'))->format('d'); 
+0

Funziona perfettamente, grazie! – dzm

2

Se ancora voleva utilizzare strtotime e la funzione data invece di un oggetto DateTime() funzionerebbe come segue:

date('d', strtotime('+6 months')); 
0

Non è necessario passare time() a strtotime, poiché è l'impostazione predefinita.

A parte questo, il tuo approccio è corretto - tranne che prendi il date('d') (che sta mettendo fuori il giorno) e non date('m') per il mese, quindi echo date('m', strtotime('+6 month')); dovrebbe fare.

Tuttavia, mi consiglia di utilizzare il modo DateTime, che John ha dichiarato. DateTime ha diversi vantaggi rispetto alle "vecchie" funzioni di data, ad esempio non smettono di funzionare quando i secondi dal big bang UNIX non si adattano più a un intero a 32 bit.

1

È possibile utilizzare la classe DateTime in collaborazione con la classe DateInterval:

<?php 
$date = new DateTime(); 
$date->add(new DateInterval('P6M')); 

echo $date->format('d M Y'); 
0

È possibile utilizzare la classe simpleDate:

include('../code/simpleDate.php'); 
$date = new simpleDate(); 
echo $date->now()->addMonth(6)->get(); 

Controllare il tutorials here.