Inhalt per mktime

leuktra

Mitglied
Hallo zusammen,

könnte bitte mal jemand schauen, ob das so korrekt ist! Für Verbesserungsvorschläge bin ich auch dankbar :o)

PHP:
<?php
$tstamp = mktime(0, 0, 0, date("m"), date("d"));
$heute = date("d.m", $tstamp);

if ($heute > 01.12 && $heute < 21.12)
{
echo 'Inhalt vom 01.12. - 21.12.'; 
}
if ($heute > 22.12 && $heute < 31.12)
{
echo 'Inhalt vom 22.12. - 31.12.'; 
}
if ($heute > 01.01 && $heute < 02.02)
{
echo 'Inhalt vom 01.01. - 01.02.'; 
}
if ($heute > 02.02 && $heute < 01.12)
{
echo 'Inhalt vom 02.02. - 30.11.'; 
}
?>
 
Die Frage ist, was mit dem Algorithmus erreicht werden möchte. Syntaktisch ist er korrekt, wobei die „01.12“, „21.12“, etc. allerdings als Dezimalzahlen behandelt werden (also 1,12, 21,12, etc.), was du sicherlich nicht beabsichtigt hast.
 
Hi Gumbo,

was? Wo kommen denn die Kommata her? Das soll natürlich nicht so sein! Wie löse ich das Problem? Ist sonst noch etwas falsch?
 
PHP:
$tstamp = mktime(0, 0, 0, date("m"), date("d"));

if ($tstamp> mktime(0, 0, 0, 12,1) && $tstamp< mktime(0, 0, 0, ,12,21))
{
echo 'Inhalt vom 01.12. - 21.12.'; 
} 
//...
Versuch es mal so, das müsste hinhauen!

Die Kommata kommen daher, dass PHP im "Reincode" den Punkt als das Komma betrachtet, zumindest bei den Zahlen.
Mit deiner Variante müsstest du die Variable $heute auf einen String überprüfen, denn die Funktion [phpf]date[/phpf] gibt ja schließlich einen String zurück.
Das hieße im Klartext:
if ($heute == "21.12") {
Nachteil bei dieser Geschichte ist das du die < und > Zeichen natürlich nicht einsetzen kannst!
Die Lösung wäre einfach nur die Timestamps zu vergleichen, denn diese sind ja im Zahlenformat (Sekunden)!

Korrigier mich wer wenns quark ist :)
 
Zuletzt bearbeitet:
Ist halt nicht getestet, aber theoretisch klar :)

Ok, ich sag einfach JA :D

Edit:
Neeee, nur fast ;)
Du musst <= und >= verwenden um die Vergleichstage mit einzubeziehen!
 
Hi O.J.,

danke! Genau, die Sache mit dem "=" wäre meine nächste Frage gewesen!

Fragen wollte ich auch noch, ob das Enddatum der vorherigen Zeitspanne das Startdatum der nächsten Zeitspanne sein muß?
 
Nein, natürlich nicht!
[phpf]mktime[/phpf] erstellt einen Timestamp. Ein Timestamp gibt die Zeit in Sekunden seit 1970 (glaube ich!) zurück!
Also ist es ja egal welche Daten du [phpf]mktime[/phpf] übergibst, die Funktion wird immer einen eigenständigen Timestamp erstellen mit dem du arbeiten kannst. Wie gesagt, sehe Zeitarbeit in PHP immer in Sekunden an, dann bist du auf der sicheren Seite!
 
hi,

wenn ich das jetzt also richtig verstanden habe, dann müßte es wohl so aussehen, um einen korrekten und
geschlossenen ablauf über das jahr zu gewährleisten:

PHP:
<?php
$tstamp = mktime(0, 0, 0, date("m"), date("d"));

if ($tstamp >= mktime(0, 0, 0, 12, 1) && $tstamp <= mktime(0, 0, 0, 12, 21))
{
echo 'Inhalt vom 01.12. - 21.12.'; 
} 
if ($tstamp >= mktime(0, 0, 0, 12, 22) && $tstamp <= mktime(0, 0, 0, 12, 31))
{
echo 'Inhalt vom 22.12. - 31.12.'; 
} 
if ($tstamp >= mktime(0, 0, 0, 01, 01) && $tstamp <= mktime(0, 0, 0, 02, 01))
{
echo 'Inhalt vom 01.01. - 01.02.'; 
} 
if ($tstamp >= mktime(0, 0, 0, 02, 02) && $tstamp <= mktime(0, 0, 0, 11, 30))
{
echo 'Inhalt vom 02.02. - 30.11.'; 
} 
?>

korrekt?
 
Du könntest auch mit Zeichenketten arbeiten, dabei muss die Monatszahl allerdings am Anfang stehen:
PHP:
$foo = date('m-d');
if( strcmp('12-01', $foo) >= 0 && strcmp('12-21', $foo) <= 0 ) {
	echo 'Inhalt vom 01.12. - 21.12.';
}
if( strcmp('12-22', $foo) >= 0 && strcmp('12-31', $foo) <= 0 ) {
	echo 'Inhalt vom 22.12. - 31.12.';
}
if( strcmp('01-01', $foo) >= 0 && strcmp('02-01', $foo) <= 0 ) {
	echo 'Inhalt vom 01.01. - 01.02.';
}
if( strcmp('02-02', $foo) >= 0 && strcmp('11-31', $foo) <= 0 ) {
	echo 'Inhalt vom 02.02. - 30.11.';
}
 
Zurück