Kleines Problem mit - mktime

Hallo zusammen,

trotz mehrmaligem versuchen und Codeumstellungen ist es mir einfach nicht gelungen den Fehler zu finden.

Der Codeblock soll einfach eine Anweisung ausführen wenn das Datum in dem vorgegebenen Bereich liegt.

Und nun hängt es schon, so sieht die Ausgabe aus:

[PHP]Heute ist Pfingsten

Summe von MkTime - Aktuelles Datum: 1307014214

Summe von MkTime - Pfingsten Anfang: 1306810800

Summe von MkTime - Pfingsten Ende: . 1308067200[/PHP]
Wie kann es sein dass die Summe von MkTime (Pfingsten-Anfang) kleiner ist als die Summe von MkTime(AktuellesDatum) obwohl das Datum von (Pfingsten-Anfang) noch in der Zukunft liegt also noch gar nicht erreicht sein kann?

Hier der Quellcode:
[PHP]<?php

$Pfingsten_Anfang = mktime(05,0,0,06,09,2011);

$Pfingsten_Ende = mktime(18,0,0,06,14,2011);

$AktuellesDatum = mktime(date(‚H‘),date(‚i‘),date(‚s‘),date(‚m‘),date(‚d‘),date(‚Y‘));

if ($AktuellesDatum <= ($Pfingsten_Ende)&&($AktuellesDatum >= ($Pfingsten_Anfang))){
echo „Heute ist Pfingsten

“;
}

elseif ($AktuellesDatum <= ($Winterzeit_Ende)&&($AktuellesDatum >= ($Winterzeit_Anfang))){
echo „Heute wird die Uhr umgestellt“;
}

elseif ($AktuellesDatum <= ($Weihnachten_Ende)&&($AktuellesDatum >= ($Weihnachten_Anfang))){
include(„Heute ist Weihnachten“);
}

elseif ($AktuellesDatum <= ($Sylvester_Ende)&&($AktuellesDatum >= ($Sylvester_Anfang))){
include(„Heute ist Sylvester“);
}

else
echo „Keine Datum trifft zu

“;
echo "
Summe von MkTime - Aktuelles Datum: " . $AktuellesDatum . „

“;
echo "
Summe von MkTime - Pfingsten Anfang: " . $Pfingsten_Anfang . „

“;
echo "
Summe von MkTime - Pfingsten Ende: . " . $Pfingsten_Ende . „

“;

?>[/PHP]Wo liegt der Fehler, bzw. Gedankenfehler ich sehe es einfach nicht. Mit vielen anderen Datumsangaben funktioniert es komischer weise.

Ich kann es zwar jetzt nicht genau sagen warum das so ist,
aber auf meiner Testumgebung wird folgendes ausgegeben :

[PHP]
$Pfingsten_Anfang = mktime(5,0,0,06,09,2011);
echo date(‚d.m.Y‘,$Pfingsten_Anfang).‚
‘;
[/PHP]Ausgabe : 31.05.2011;

[PHP]
$Pfingsten_Anfang = mktime(5,0,0,06,9,2011);
echo date(‚d.m.Y‘,$Pfingsten_Anfang).‚
‘;
[/PHP]Ausgabe: 09.06.2011

Keine Ahnung warum das so ist. Anscheinend sollte man bei mktime() bei den Tag Angaben keine vorangestellte 0 machen.

Hallo,

vielen Dank für den Hinweis, das wäre natürlich möglich.

Bei meinem Beispiel würden nun auch die Summen stimmen.

[CODE]Keine Datum trifft zu

Summe von MkTime - Aktuelles Datum: 1307030865

Summe von MkTime - Pfingsten Anfang: 1307588400

Summe von MkTime - Pfingsten Ende: . 1308067200[/CODE]nochmals vielen Dank für den Hinweis.

Vieleicht weis ja auch noch jemand welche Regel es bei der Eingabe gibt.

Monate und Tage generell ohne voranstehene Null?

Ja, ist so, steht auch im Manual: PHP: mktime - Manual

Hallo,

vielen Dank, genau das hatte ich nicht beachtet.

Lag natürlich auch daran, bei anderen Beispielen hatte ich keine voranstehende Null, dadurch fiehl es mir natürlich auch nicht auf.

Aber ihr werdet es nicht glauben, in zwei PHP Büchern wird MkTime beschrieben, aber darauf auch nicht hingewiesen.

Danke nochmals an alle die sich die Mühe gemacht haben. Hätte ich selbst mal etwas genauer gelesen, hätte es mir einige Stunden suchen gespart.

Vielen Dank nochmals und ein geniales Wochenende an alle.

nja DIREKT steht es glaub ich nicht im manual.

Bei den Parametern steht aber unter anderem:

int $day = date(„j“)

und date(„j“) heist Tag ohne fuehrende Nullen.

Also koennte durchaus etwas verwirrend sein, wenn man sich die Date Funktion nicht genau ansieht :wink:

Vorangestellte Null heißt Oktalsystem (Zahlensystem auf Basis 8), nicht Dezimalsystem (Zahlensystem auf Basis 10). 09 ist im Oktalsystem kein zulässiger Wert, es kennt nur die Ziffern 0 bis 7. PHP interpretiert die Angabe deshalb als dezimal 0. Für mktime gilt dann diese Regel:

Values less than 1 (including negative values) reference the days in the previous month, so 0 is the last day of the previous month

[php]// Oktal Dezimal
//---------------------------
echo 00, „\n“; // 0
echo 01, „\n“; // 1
echo 02, „\n“; // 2
echo 03, „\n“; // 3
echo 04, „\n“; // 4
echo 05, „\n“; // 5
echo 06, „\n“; // 6
echo 07, „\n“; // 7
echo 08, „\n“; // 0 – keine gültige Angabe im Oktalsystem
echo 09, „\n“; // 0 – keine gültige Angabe im Oktalsystem
echo 010, „\n“; // 8
echo 011, „\n“; // 9
echo 012, „\n“; // 10
echo 013, „\n“; // 11
echo 014, „\n“; // 12
echo 015, „\n“; // 13
echo 016, „\n“; // 14
echo 017, „\n“; // 15
echo 018, „\n“; // 1 – keine gültige Angabe im Oktalsystem
echo 019, „\n“; // 1 – keine gültige Angabe im Oktalsystem
echo 020, „\n“; // 16[/php]

Weg mit den Nullen vor der Definition von Integern. Es sei denn, Oktalsystem ist wirklich gewollt.

Hallo Mermshaus,

vielen Dank für die erschöpfende Antwort, das erklärt auch warum der Code meistens funktionierte und nur manchmal nicht. Ohne dieses Wissen sucht man sich natürlich tot nach dem Fehler.