Mein Code zum Hinzufügen eines Tages zu einem Datum gibt ein Datum vor dem Hinzufügen des Tages zurück:
2009-09-30 20:24:00
Datum nach dem Hinzufügen eines Tages SOLLTE auf den nächsten Monat übertragen werden:1970-01-01 17:33:29
<?php
//add day to date test for month roll over
$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>
Ich habe schon ziemlich ähnlichen Code verwendet. Was mache ich hier falsch?
date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));
wie in der Antwort, die @ w35l3y Ihnen gegeben hat.quelle
Einfachste Lösung:
quelle
echo (new DateTime('+1 day'))->format('Y-m-d H:i:s');
Unexpected T_OBJECT_OPERATOR” error in PHP
Es hat bei mir funktioniert: Zum aktuellen Datum
für jedes Datum:
quelle
strtotime()
- es kann alles in einem Anrufdate('Y-m-d', strtotime($date . " +1 day"));
Versuche dies
quelle
Einfach zu lesen und zu verstehen:
quelle
Ich füge immer nur 86400 hinzu (Sekunden an einem Tag):
Es ist nicht die schickste Art, wie Sie es wahrscheinlich tun könnten, aber es funktioniert!
quelle
Obwohl ich der Antwort von Doug Hays zustimme, werde ich hier sagen, dass der Grund dafür, dass Ihr Code nicht funktioniert, darin besteht, dass strtotime () eine INT als zweites Argument erwartet, keine Zeichenfolge (auch keine, die ein Datum darstellt).
Wenn Sie die maximale Fehlerberichterstattung aktivieren, wird dies als Fehler "Ein nicht gut ausgebildeter numerischer Wert" angezeigt, der die Stufe E_NOTICE hat.
quelle
Die
modify()
Methode, mit der einem vorhandenenDateTime
Wert Inkremente hinzugefügt werden können.Erstellen Sie ein neues
DateTime
Objekt mit dem aktuellen Datum und der aktuellen Uhrzeit:Sobald Sie das
DateTime
Objekt haben, können Sie seinen Wert bearbeiten, indem Sie Zeiträume hinzufügen oder entfernen:Sie können mehr im PHP-Handbuch lesen .
quelle
Der folgende Code ruft den ersten Tag im Januar des laufenden Jahres ab (es kann sich jedoch auch um ein anderes Datum handeln) und fügt diesem Tag 365 Tage hinzu (es kann jedoch N Tage sein), indem die DateTime-Klasse und ihre Methode modify () und format ( ):
quelle
Da Sie bereits eine Antwort darauf haben, was mit Ihrem Code nicht stimmt, kann ich eine andere Perspektive einbringen, wie Sie generell mit Datumsangaben spielen und Ihr Problem spezifisch lösen können.
Oft stellen Sie ein Problem in Bezug auf die Lösung. Dies ist nur einer der Gründe, warum Sie einen zwingenden Code erhalten. Es ist großartig, wenn es funktioniert; Es gibt nur andere, wohl wartbarere Alternativen. Einer von ihnen ist ein deklarativer Code. Es geht darum zu fragen, was Sie brauchen, anstatt wie Sie dorthin gelangen.
In Ihrem speziellen Fall kann dies wie folgt aussehen. Zuerst müssen Sie herausfinden, wonach Sie suchen, dh Abstraktionen entdecken. In Ihrem Fall brauchen Sie anscheinend ein Datum . Nicht irgendein Datum, sondern das mit einer Standarddarstellung. Angenommen, ISO8601-Datum. Es gibt mindestens zwei Implementierungen: Die erste ist ein Datum, das aus einer ISO8601-formatierten Zeichenfolge (oder einer Zeichenfolge in einem anderen Format) analysiert wurde, und die zweite ist ein zukünftiges Datum, das einen Tag später liegt. Somit könnte der gesamte Code so aussehen:
Weitere Beispiele zum Jonglieren mit Datum und Uhrzeit finden Sie in diesem Beispiel .
quelle