2016-04-15 23 views
5

devo data in questa forma - - 20160428000000 (28 aprile 2016) cioè yyyymmdd ...aggiungere giorni per il mese non superiore ultimo giorno del mese php

Ho bisogno che se alcuni giorni (ad es. 3) sono aggiunto a questa data - li dovrebbe aggiungere, ma non supera il mese (04) - risultati attesi - 20160430000000 - 30 Aprile

Allo stesso modo, 20160226000000 + 5 giorni dovrebbe tornare 20160229000000 cioè anno bisestile febbraio ciò significa, non dovrebbe saltare un altro mese

Eventuali suggerimenti/idee?

+0

ottenere l'intervallo tra la data e l'ultima data del mese. Se questo intervallo è inferiore all'intervallo dato per l'aggiunta, è sufficiente tornare l'ultimo giorno del mese. – mitkosoft

risposta

3

Un'altra alternativa sarebbe quella di utilizzare DateTime classi di check it out:

primo luogo, naturalmente creare l'oggetto attraverso l'ingresso. Quindi, imposta il giorno finale dell'oggetto mese.

Successivamente, effettuare l'aggiunta, quindi controllare se supera il giorno di fine. Se sì, è impostato alla fine, se non, quindi ottenere il risultato dell'addizione:

$day = 5; // days to be added 
$date = '20160226000000'; // input date 
$dt = DateTime::createFromFormat('YmdHis', $date); // create the input date 
$end = clone $dt; // clone/copy the input 
$end->modify('last day of this month'); // and set it to last day 
$dt->add(DateInterval::createFromDateString("+{$day} days")); // add x days 
// make comparision 
$final_date = ($dt > $end) ? $end->format('YmdHis') : $dt->format('YmdHis'); 
echo $final_date; 
+1

bello ed elegante! +1 – mitkosoft

+0

Anche questo funziona, Grazie mille – jitendrapurohit

+0

Stavo per suggerire qualcosa di simile usando 'DateTimeImmutable', ma è fondamentalmente la stessa logica. +1 :) – Narf

1

Per questo si può provare in questo modo:

$given_date = 20160428000000; 
$no_of_day = 3; 

if(date('m',strtotime($given_date)) < date('m',strtotime($given_date ." +".$no_of_day."days"))){ 
    echo "Exceeded to next month <br/>"; 
    echo "Last date of month should be: ".date("t M Y", strtotime($given_date)); 
} 
else { 
    echo "Next date will be after ".$no_of_day." day(s)<br/>"; 
    echo date('d M Y',strtotime($given_date ." +".$no_of_day."days")); 
} 

Se mese salterà il prossimo mese allora verrà mostrato il mese corrente ultima data. altro saggio mostrerà la data dopo il numero di giorni esteso.

+0

Grazie, ma questo mi darà l'ultimo appuntamento - il 30 aprile? – jitendrapurohit

+0

@jitendrapurohit! Sì lo farà, provalo. – Yash

+0

Sì, funziona! Grazie – jitendrapurohit

0

Se la data aggiunto supera ultimo giorno, selezionerà l'ultimo giorno come nuova data.

<?php 
$date_orig = 20160226000000; 
$add_day = 5; # No. of days to add 

$added_date  = strtotime($date_orig. ' + '.$add_day.' days'); // Add $add_day to $date_orig 
$last_date  = strtotime(date("YmtHis", strtotime($date_orig))); // Last day of $date_orig 
$new_date  = ($added_date > $last_date) ? $last_date : $added_date; // check the added date exceeds the last date 
$new_date_format = date("YmdHis", $new_date); // Format Date 

echo $new_date_format; 
?> 
Problemi correlati