dedlfix: Seltsame Ausgabe bei php-Datums und Zeitfunktionen

Beitrag lesen

Tach!

ich dachte immer, dass "Y" und "y" bei strtotime() gleichermaßen gehen?

Nein. Eine zweistellige Jahresanzahl ist nicht eindeutig, besonders nicht beim Rechnen damit und einem Automaten, der aus einer beliebigen Zeichenfolge einen korrekten Datums- und Zeitwert ermitteln soll.


> while (strtotime(date("d.m.Y",$neuesDatumTimestamp)) < strtotime(date("d.m.Y",$endTime))) {

Das ist recht umständlich. Du willst nur den Datumsanteil. Leider gibt es da auch in der objektorientierten Variante keine Methode, die nur den einen oder den anderen Teil im Rohformat liefert. Man muss da wohl immer über die Formatierung gehen, um Teile zu extrahieren. Aber du brauchst an der Stelle kein menschenlesbar formatiertes Datum, sondern eins, mit dem du einen Vergeich anstellen kannst. Also wäre Ymd eine geeignetere Formatierung, weil die sofort verglichen werden kann, ohne erst wieder einen Timestamp aus dem formatierten Wert zu parsen.

Denn dabei tritt etwas unerwartetes auf. Füg mal hinter die while-Zeile folgende Kontrollausgaben ein:

  echo date("d.m.Y",$neuesDatumTimestamp)."<br>";
  echo date("d.m.Y H:i:s",strtotime(date("d.m.y",$neuesDatumTimestamp)))."<br>";

Die erste kontrolliert den originalen Wert. Die zweite kontrolliert den Wert nach dem Parsen.

Mit den Kontrollausgaben kannst du sehen, dass strtotime() da was anderes erkennt, als du erwartest. Konsequenz: Immer mit vollständigen Jahreszahlen arbeiten. Und bei Automatismen immer sehr skeptisch kontrollieren, dass sie richtig arbeiten. Im Falle von strtotime() empfiehlt es sich, eine relativ eindeutige Variante zu nehmen. Das ist zum einen eine vierstelliges Jahreszahl, und zum anderen das Format Y-m-d, das noch am sichersten erkannt wird.

dedlfix.