Datumsabfrage
Justus
- php
Hallo!
Ich habe ein Problem, wenn ich mit dem Datum rechnen will.
Meine beiden Variablen: 01.05.2008($heute) und 15.05.2008($spaeter)
Dann mache ich eine Abfrage :
if($heute < $spaeter)
{echo "01.05.2008 ist kleiner als 15.05.2008"}
else
{echo "01.05.2008 ist nicht kleiner als 15.05.2008"}
eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!
Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?
danke tom
Hi,
eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!
Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?
nein, entweder Du vergleichst time() (Sekunden seit 1970), rechnest Dein Datum mit mktime()in Sekunden seit 1970 um, oder machst zum Vergleich sowas mit date(): $d = date("Ymd"); das ergibt einen Zeitstempel wie 20080501, den kannst Du dann mit grösser/kleiner vergleichen.
Gruesse, Joachim
»»entweder Du vergleichst time() (Sekunden seit 1970), rechnest Dein Datum mit mktime()in Sekunden seit 1970 um, oder machst zum Vergleich sowas mit date(): $d = date("Ymd"); das ergibt einen Zeitstempel wie 20080501, den kannst Du dann mit grösser/kleiner vergleichen.
Gruesse, Joachim
Vielen Dank, mit den Sekunden klappts super! Das war der trick.
Hello,
Ich habe ein Problem, wenn ich mit dem Datum rechnen will.
Du rechnest ja gar nicht, sondern Du vergleichst.
Und du vergelichst auch nicht Werte im Datumstyp (den hat PHP nämlich gar nicht), sondern Du vergleichst zwei Strings.
if($heute < $spaeter)
entweder, Du baust diese Strings ins ANSI-Format um, also YYYYMMTT oder auch YYYY-MM-TT, oder aber Du musst sie umrechnen lassen in eine Datumsreferenzzahl. Da bietet sich in einem leider sehr eingeschränkten Wertebereich der Unix-Timestamp an.
PHP kennt eine sehr mächtige Funktion für die Umwandlung: strtotime()
http://de3.php.net/manual/en/function.strtotime.php
Ein harzliches Glückauf
Tom vom Berg
Hallo Tom,
PHP kennt eine sehr mächtige Funktion für die Umwandlung: strtotime()
das Adjektiv "mächtig" in Verbindung mit EDV löst oft und völlig zu recht spontanen Brechreiz aus!
"mächtig" svw. 'alles nicht oder' ... ;-)
wie ich schon vermutete:
Parse about any English textual datetime description into a Unix timestamp
Was problemlos mit "unbrauchbar" übersetzt werden kann ... ;-)
Also muss man als German User sich was eigenes basteln:
<?php
function get_Date($string) {
$d=1; $m=1; $y=0;
@list($d,$m,$y) = explode('.',trim($string));
return mktime(0,0,0,intval($m),intval($d),intval($y));
}
?>
Diese Funktion funktioniert auch wenn man 'Blödfug' eingibt ... ;-)
mbG Rolf
Hello Rolf,
Also muss man als German User sich was eigenes basteln:
Ich kann Dir da nicht ganz folgen:
<?php ### strtotime.php ###
$timestamp = strtotime('01.05.2008');
echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);
$timestamp = strtotime('30.05.2008');
echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);
$timestamp = strtotime('31.12.2008');
echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);
$timestamp = strtotime('12.01.2009');
echo "<br>$timestamp = ".date('d.m.Y' ,$timestamp);
?>
ergibt bei mir:
1209592800 = 01.05.2008
1212098400 = 30.05.2008
1230678000 = 31.12.2008
1231714800 = 12.01.2009
Und gegen das Ergebnis habe ich nichts einzuwenden.
Wieso soll ich da eine eigene Funktion schreiben?
Ein harzliches Glückauf
Tom vom Berg
Hallo Tom,
Wieso soll ich da eine eigene Funktion schreiben?
weil Du dem PHP-Manual vertraust!
Alles andere wäre nicht vorhersehbar ... :-(
mbG Rolf
Hallo Tom,
Wieso soll ich da eine eigene Funktion schreiben?
weil Du dem PHP-Manual vertraust!
Alles andere wäre nicht vorhersehbar ... :-(
wie man z.B. auch hier sehen kann!
Okay, auf einer privaten Maschine und unter Ausschluss anderer Nutzer,
bekommt man alles irgendwie "hinkonfiguriert", siehe Uri Gellert ... ;-)
mbG Rolf
echo $begrüßung;
Meine beiden Variablen: 01.05.2008($heute) und 15.05.2008($spaeter)
Dann mache ich eine Abfrage :
if($heute < $spaeter)
{echo "01.05.2008 ist kleiner als 15.05.2008"}
else
{echo "01.05.2008 ist nicht kleiner als 15.05.2008"}eigentlich ist 01.05.2008 "kleiner" als 15.05.2008 aber es wird der else teil ausgeführt, was ich nicht ganz verstehe!
Ich auch nicht, denn ich kann das Verhalten nicht nachvollziehen.
$heute = '01.05.2008';
$spaeter = '15.05.2008';
var_dump($heute < $spaeter);
ergibt als Ausgabe ein true.
Kann man denn überhaupt ein Datum mit kleiner und größer vergleichen?
Ja, aber einem handelsüblichen Computer fehlt heutzutage immer noch die Intelligenz, aus einer simplen, nicht näher spezifizierten Zeichenfolge die Bedeutung "Datum" herauszulesen, um die Regeln eines Datumsvergleichs darauf anwenden zu können. Alternativen wurden ja bereits genannt.
echo "$verabschiedung $name";