• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kleines Problem mit - mktime

lacido

Mitglied
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
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<br /><br />";
}

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<br /><br />";
echo "<br /> Summe von MkTime - Aktuelles Datum: " . $AktuellesDatum . "<br /><br />";
echo "<br /> Summe von MkTime - Pfingsten Anfang: " . $Pfingsten_Anfang . "<br /><br />";
echo "<br /> Summe von MkTime - Pfingsten Ende: . " . $Pfingsten_Ende . "<br /><br />";



?>
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).'<br />';
Ausgabe : 31.05.2011;

PHP:
$Pfingsten_Anfang = mktime(5,0,0,06,9,2011);
echo date('d.m.Y',$Pfingsten_Anfang).'<br />';
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
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?
 
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 ;)
 
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

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.
 
Zurück
Oben