Pit: Seltsame Ausgabe bei php-Datums und Zeitfunktionen

Beitrag lesen

Hallo Forum,

ich dachte immer, dass "Y" und "y" bei strtotime() gleichermaßen gehen? Ich kann mir folgenden Unterschied nicht erklären:

<?php
// mktime(hour, min, sec, month, day, year);
$startTime = mktime(10, 30, 0, 12, 15, 2017); // 15.12.2017 10:30:00 Uhr
$endTime = mktime(10, 30, 0, 01, 20, 2018); // 20.01.2018 10:30:00 Uhr
$neuesDatumTimestamp = $startTime;

echo ("Ausgabe 1:<br>");
$dayAdd = 0;
while (strtotime(date("d.m.Y",$neuesDatumTimestamp)) < strtotime(date("d.m.Y",$endTime))) {
  $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."<br>");
$dayAdd ++;
}

$startTime = mktime(10, 30, 0, 12, 15, 2017); // 15.12.2017 10:30:00 Uhr
$endTime = mktime(10, 30, 0, 01, 20, 2018); // 20.01.2018 10:30:00 Uhr
$neuesDatumTimestamp = $startTime;

echo ("<br><br>Ausgabe 2:<br>");
$dayAdd = 0;
while (strtotime(date("d.m.y",$neuesDatumTimestamp)) < strtotime(date("d.m.y",$endTime))) {
  $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."<br>");
$dayAdd ++;
}


$startTime = mktime(10, 30, 0, 12, 15, 2017); // 15.12.2017 10:30:00 Uhr
$endTime = mktime(10, 30, 0, 01, 25, 2018); // 20.01.2018 10:30:00 Uhr
$neuesDatumTimestamp = $startTime;

echo ("<br><br>Ausgabe 3:<br>");
$dayAdd = 0;
while (strtotime(date("d.m.y",$neuesDatumTimestamp)) < strtotime(date("d.m.y",$endTime))) {
  $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."<br>");
$dayAdd ++;
}

Ausgaben:

Ausgabe 1:
15.12.2017
16.12.2017
17.12.2017
...
20.01.2018


Ausgabe 2:
15.12.2017
16.12.2017
17.12.2017
18.12.2017
19.12.2017
20.12.2017


Ausgabe 3:
15.12.2017
16.12.2017
17.12.2017
...
25.01.2018

Ausgabe 1 ist korrekt.

Ausgabe 2 mag auch korrekt sein, ist aber für mich unerwartet 😉

Ausgabe 3 sieht korrekt aus, ist aber aufgrund von Ausgabe 2 für mich unerwartet…

Kann mir einer erklären, warum

Ausgabe 2 mit "y" und 20.01.2018 bereits am 20.01.2017 abbricht und

Ausgabe 3 mit "y" und 25.01.2018 nicht abbricht, sondern bis zum 25.01.2018 durchläuft?

Pit