2016-04-15 7 views
5

Ich habe Datum in dieser Form - - 20160428000000 (28. April 2016), dh yyyymmdd ...Tage zu Monat fügen Sie nicht letzten Tag des Monats php mehr als

Ich brauche, dass, wenn einige Tage (zB 3.) Sind zu diesem Zeitpunkt hinzugefügt - es ihnen hinzufügen soll aber nicht den Monat nicht überschreiten (04) - erwartete Ausgabe - 20160430000000 - 30. April

, ähnlich 20160226000000 + 5 Tage sollten 20160229000000 dh Schaltjahr Februar zurückkehren das bedeutet, es nicht springen sollte ein anderer Monat.

Irgendwelche Hinweise/Ideen?

+0

erhalten Sie das Intervall zwischen Ihrem Datum und dem letzten Datum des Monats. Wenn dieses Intervall kleiner als das angegebene Intervall zum Hinzufügen ist, geben Sie einfach den letzten Tag des Monats zurück. – mitkosoft

Antwort

3

wäre eine weitere Alternative sein DateTime Klassen zu verwenden, um es zu überprüfen:

Zuerst natürlich das Objekt durch den Eingang erstellen. Legen Sie dann den Endtag des Monatsobjekts fest.

Danach, machen Sie die Addition dann überprüfen Sie, ob es den Endtag überschreitet. Wenn ja, es bis zum Ende gesetzt, wenn nicht, dann das Ergebnis der Addition erhalten:

$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

nett und elegant! +1 – mitkosoft

+0

Dies funktioniert auch, Vielen Dank – jitendrapurohit

+0

Ich war im Begriff, etwas ähnliches mit 'DateTimeImmutable' vorschlagen, aber es ist im Grunde die gleiche Logik. +1 :) – Narf

1

dies für Sie so versuchen:

$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")); 
} 

Wenn Monat zum nächsten Monat springen, dann wird es den aktuellen Monat letzten Tag zeigt. Andernfalls wird das Datum nach der Anzahl der Tage angezeigt.

+0

Danke, aber wird dies mir das letzte Datum geben - 30. April? – jitendrapurohit

+0

@jitendrapurohit! Ja, es wird es versuchen. – Yash

+0

Ja, es funktioniert! Danke – jitendrapurohit

0

Wenn das zugegebene Datum letzten Tag überschreitet, wird den letzten Tag als neues Datum auswählen.

<?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; 
?> 
Verwandte Themen