Wie kann ich den letzten Tag des Monats in PHP erhalten?
Gegeben:
$a_date = "2009-11-23"
Ich möchte 2009-11-30; und gegeben
$a_date = "2009-12-23"
Ich möchte 2009-12-31.
t
Gibt die Anzahl der Tage im Monat eines bestimmten Datums zurück (siehe Dokumentation fürdate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
können Sie so etwas tun:(new DateTime('2009-11-23'))->modify('last day of')
Der Code mit strtotime () schlägt nach dem Jahr 2038 fehl. (Wie in der ersten Antwort in diesem Thread angegeben) Versuchen Sie beispielsweise Folgendes:
Es wird eine Antwort geben als: 1970-01-31
Daher sollte anstelle von strtotime die DateTime-Funktion verwendet werden. Der folgende Code funktioniert ohne das Problem des Jahres 2038:
quelle
strtotime
gibt mir der Code dieses Ergebnis: 2040-11-30Ich weiß, dass dies etwas spät ist, aber ich denke, es gibt eine elegantere Möglichkeit, dies
PHP 5.3+
mithilfe der DateTime- Klasse zu tun :quelle
$date = new DateTime('last day of 2020-2');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
Gibt es auch die eingebaute PHP-Funktion cal_days_in_month () ?
quelle
Das sollte funktionieren:
quelle
Was ist los - Das eleganteste für mich ist die Verwendung
DateTime
Ich frage mich, ich sehe nicht
DateTime::createFromFormat
, Einzeilerquelle
Sie können ein Datum für den ersten des nächsten Monats erstellen und dann verwenden
strtotime("-1 day", $firstOfNextMonth)
quelle
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
undmktime()
abgeraten, weil. von bekannten Fehlern wie Datumsbestimmung am Rande der Monate und Schaltjahrkalakulationen. DaDateTime
verfügbar ist, sollten Sie diese Klasse verwenden, um zukünftige Probleme zu vermeiden. Wie schon oft vor mir gesagt, funktionieren beidestrtotime()
undmktime()
werden nach 2038 scheitern. Deshalb habe ich ...Versuchen Sie dies, wenn Sie PHP 5.3+ verwenden.
Ändern Sie Folgendes, um das letzte Datum des nächsten Monats zu ermitteln:
und so weiter..
quelle
Ihre Lösung ist da ..
quelle
31
fürSeptember
die, wie Sie wissen, das nicht richtig ist.Sie können den letzten Tag des Monats auf verschiedene Arten finden. Aber einfach können Sie dies mit der PHP-Funktion strtotime () und date () tun. Ich würde mir vorstellen, dass Ihr endgültiger Code ungefähr so aussehen würde:
Live-Demo
Wenn Sie jedoch PHP> = 5.2 verwenden, empfehle ich dringend, das neue DateTime-Objekt zu verwenden. Zum Beispiel wie unten:
Live-Demo
Sie können dies auch mit Ihrer eigenen Funktion wie folgt lösen:
quelle
Wenn Sie die Carbon API-Erweiterung für PHP DateTime verwenden, können Sie den letzten Tag des Monats abrufen mit:
quelle
$date->day = 0;
Sie können es auch mit datetime verwenden
quelle
quelle
Mit Zend_Date ist es ziemlich einfach:
quelle
quelle
Hier ist eine vollständige Funktion:
Dies würde Folgendes ausgeben:
Ausgabe: 28
quelle
Es gibt Möglichkeiten, den letzten Tag des Monats zu erreichen.
quelle
Ich bin spät dran, aber es gibt eine Handvoll einfacher Möglichkeiten, dies zu tun, wie erwähnt:
Mit mktime () habe ich die vollständige Kontrolle über alle Aspekte der Zeit ... IE
Wenn Sie den Tag auf 0 setzen und Ihren Monat um 1 verschieben, erhalten Sie den letzten Tag des Vormonats. 0 und negative Zahlen haben in den verschiedenen Argumenten den gleichen Effekt. PHP: mktime - Handbuch
Wie einige gesagt haben, ist strtotime nicht der beste Weg und wenig, wenn keiner so einfach vielseitig ist.
quelle
Ich verwende strtotime mit cal_days_in_month wie folgt:
quelle
Ich habe es in meine Datums- / Uhrzeit-Hilfsklasse hier https://github.com/normandqq/Date-Time-Helper eingewickelt mit
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Und es ist geschafft
quelle
Eine andere Möglichkeit, mktime und nicht date ('t') zu verwenden:
Auf diese Weise wird entweder berechnet, ob es 31,30 oder 29 ist
quelle
Carbon API Erweiterung für PHP DateTime
oder
wird zurückkehren
quelle
http://zkinformer.com/?p=134
quelle
Dies ist ein viel eleganterer Weg, um das Ende des Monats zu erreichen:
quelle
Sie können verwenden "
t
" verwenden, um die Anzahl der Tage in einem bestimmten Monat abzurufen.Der Code wird ungefähr so aussehen:
Der Code ist selbsterklärend. Hoffe es hilft.
quelle