Seltsame Ausgabe bei php-Datums und Zeitfunktionen
bearbeitet von Regina Schaukrug> Bei mir erzeugt Dein Code jede Menge Warnungen.
Ich habe
~~~
error_reporting(E_ALL);
ini_set('display_errors', 1);
~~~
unterhalb der Startzeile `<?php` eingefügt.
Mit php7.0 (cli) sah keine einzige Warnung.
Mit hhvm sah ich dann aber sehr viele davon:
~~~
Strict Warning: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /tmp/test.php on line 45
~~~
Nachdem ich
~~~
ini_set("date.timezone","GMT");
# Alternative: ini_set("date.timezone","Europe/Berlin");
~~~
einfügte waren diese weg. **Und haben mit dem gezeigten Problem leider nichts zu tun.**
so.
Ich habe das Skript in Abschnitt 2 mal angepasst.
~~~php
while (strtotime(date("d.m.Y",$neuesDatumTimestamp)) < strtotime(date("d.m.Y",$endTime))) {
~~~
hier also bewusst das große Y verwendet um die komplette Iteration durchzuführen. dann habe ich Ausgaben eingebaut:
~~~php
echo "y: " . date( "Y-m-d", strtotime( date("d.m.y", $neuesDatumTimestamp ) ) ) . " < ", date( "Y-m-d", strtotime( date( "d.m.y",$endTime ) ) ) . "\n";
echo "Y: " . date( "Y-m-d", strtotime( date("d.m.Y", $neuesDatumTimestamp ) ) ) . " < ", date( "Y-m-d", strtotime( date( "d.m.Y",$endTime ) ) ) . "\n";
$myTag = date('d', strtotime('+'.$dayAdd.' day', $startTime));
$myMonat = date('m', strtotime('+'.$dayAdd.' day', $startTime));
$myJahr = date('Y', strtotime('+'.$dayAdd.' day', $startTime));
$neuesDatum = $myTag.".".$myMonat.".".$myJahr;
$neuesDatumTimestamp = strtotime($neuesDatum);
echo ($neuesDatum."\n");
$dayAdd ++;
}
~~~
Und folgende Ausgaben erhalten:
~~~
Ausgabe 2:
y: 2017-12-12 < 2017-12-12
Y: 2017-12-15 < 2018-01-20
15.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-15 < 2018-01-20
16.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-16 < 2018-01-20
17.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-17 < 2018-01-20
18.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-18 < 2018-01-20
19.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-19 < 2018-01-20
20.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-20 < 2018-01-20
21.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-21 < 2018-01-20
22.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-22 < 2018-01-20
23.12.2017
y: 2017-12-12 < 2017-12-12
Y: 2017-12-23 < 2018-01-20
24.12.2017
y: 2017-12-13 < 2017-12-12
Y: 2017-12-24 < 2018-01-20
25.12.2017
y: 2017-12-25 < 2017-12-12
Y: 2017-12-25 < 2018-01-20
26.12.2017
y: 2017-12-26 < 2017-12-12
Y: 2017-12-26 < 2018-01-20
27.12.2017
y: 2017-12-27 < 2017-12-12
Y: 2017-12-27 < 2018-01-20
28.12.2017
y: 2017-12-28 < 2017-12-12
Y: 2017-12-28 < 2018-01-20
29.12.2017
y: 2017-12-29 < 2017-12-12
Y: 2017-12-29 < 2018-01-20
30.12.2017
y: 2017-12-30 < 2017-12-12
Y: 2017-12-30 < 2018-01-20
31.12.2017
y: 2017-12-31 < 2017-12-12
Y: 2017-12-31 < 2018-01-20
01.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-01 < 2018-01-20
02.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-02 < 2018-01-20
03.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-03 < 2018-01-20
04.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-04 < 2018-01-20
05.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-05 < 2018-01-20
06.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-06 < 2018-01-20
07.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-07 < 2018-01-20
08.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-08 < 2018-01-20
09.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-09 < 2018-01-20
10.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-10 < 2018-01-20
11.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-11 < 2018-01-20
12.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-12 < 2018-01-20
13.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-13 < 2018-01-20
14.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-14 < 2018-01-20
15.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-15 < 2018-01-20
16.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-16 < 2018-01-20
17.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-17 < 2018-01-20
18.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-18 < 2018-01-20
19.01.2018
y: 2017-12-12 < 2017-12-12
Y: 2018-01-19 < 2018-01-20
20.01.2018
~~~
Jetzt kannst Du selbst nachsehen, welcher Hase da wohin läuft. Und hoffentlich fällt endlich jemanden auf, dass es viel zu teuer ist, strtotime() zu verwenden [und sich auf die korrekte Interpretierung eines Haufens dokumentierter Formate zu verlassen](http://php.net/manual/de/datetime.formats.date.php) wenn Tag, Monat und Jahr bekannt sind.