2009-03-18 17 views
34

Dire che ho una stringa in arrivo, "2007-02-28", qual è il codice più semplice che potrei scrivere per trasformarlo in "2007-03-01"? In questo momento sto usando solo strtotime(), quindi aggiungo 24*60*60, quindi usando date(), ma mi chiedo solo se c'è un modo più pulito, più semplice o più intelligente di farlo.Il modo più semplice per incrementare una data in PHP?

risposta

72

Un modo pulito è utilizzare strtotime()

$date = strtotime("+1 day", strtotime("2007-02-28")); 
echo date("Y-m-d", $date); 

vi darà il 2007-03-01

29

È più pulito e più semplice per aggiungere 86400. :)

Il modo più high-tech è quello di fare:

$date = new DateTime($input_date); 
$date->modify('+1 day'); 
echo $date->format('Y-m-d'); 

ma questo è davvero solo lontanamente utile se si sta facendo, per esempio, una sequenza di trasformazioni alla data, piuttosto che trovare solo il domani.

+1

Stupido CentOS ha solo PHP 5.1 e DateTime è introdotto in 5.2. Credo che finalmente dovrò aggiornare a un pacchetto di centos php non ufficiale. – davr

+3

Er, no. L'aggiunta di 86400 è una falsa semplicità. – staticsan

+0

Puoi spiegare cosa intendi con questo? – chaos

16

Si può fare l'aggiunta proprio all'interno strtotime, per esempio

$today="2007-02-28"; 
$nextday=strftime("%Y-%m-%d", strtotime("$today +1 day")); 
+0

Oh, pulito. Non lo sapevo. È quasi come il buon vecchio Date :: Manip. – chaos

6

Un altro modo è utilizzare la funzione mktime(). E 'funzione molto utile ...

$date = "2007-02-28"; 
list($y,$m,$d)=explode('-',$date); 
$date2 = Date("Y-m-d", mktime(0,0,0,$m,$d+1,$y)); 

ma credo strtotime() è meglio in quella situazione ...

+0

nice, non mi rendevo conto che mktime() avrebbe incrementato il mese in questo modo quando andassi su –

5

Il modo più semplice ...

echo date('Y-m-d',strtotime("+1 day")); //from today 

O dalla data specificata .. .

echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28'))); 
-1
$early_start_date = date2sql($_POST['early_leave_date']); 


     $date = new DateTime($early_start_date); 
     $date->modify('+1 day'); 


     $date_a = new DateTime($early_start_date . ' ' . $_POST['start_hr'] . ':' . $_POST['start_mm']); 
     $date_b = new DateTime($date->format('Y-m-d') . ' ' . $_POST['end_hr'] . ':' . $_POST['end_mm']); 

     $interval = date_diff($date_a, $date_b); 
0

Hel Lo si può provare questo qui di seguito, soprattutto se siete francese

$date = date('l j F Y'); 
#increment the date 
$date2 = date('l j F Y', strtotime("+7 day")); 

di tradurre in francese è possibile utilizzare la funzione di setlocale() o la funzione qui sotto:

function fr_date($date){ 

    $date = explode(' ', $date); 

    $date = str_replace('Monday','Lundi',$date); 
    $date = str_replace('Tuesday','Mardi',$date); 
    $date = str_replace('Wednesday','Mercredi',$date); 
    $date = str_replace('Thursday','Jeudi',$date); 
    $date = str_replace('Friday','Vendredi',$date); 
    $date = str_replace('Saturday','Samedi',$date); 
    $date = str_replace('Sunday','Dimanche',$date); 

    $date = str_replace('January','Janvier',$date); 
    $date = str_replace('February','Février',$date); 
    $date = str_replace('March','Mars',$date); 
    $date = str_replace('April','Avril',$date); 
    $date = str_replace('May','Mai',$date); 
    $date = str_replace('June','Juin',$date); 
    $date = str_replace('July','Juillet',$date); 
    $date = str_replace('August','Août',$date); 
    $date = str_replace('September','Septembre',$date); 
    $date = str_replace('October','Octobre',$date); 
    $date = str_replace('November','Novembre',$date); 
    $date = str_replace('December','Décembre',$date); 

    $date = implode(' ',$date); 
    return $date; 

} 
0
$your_date = strtotime("1month", strtotime(date("Y-m-d"))); 
$new_date = date("Y-m-d", $your_date++); 
+0

/("1month") = aumenterà di mese in mese. // ("1 giorno") = incrementerà di giorno. // (data ("Y-m-d")) = inizia ad incrementare la data sulla tua data attuale. –

+2

È necessario modificare la risposta per includere la spiegazione del codice, anziché avere la spiegazione in un commento. – astidham2003

Problemi correlati