1.8k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Ich finde die Lösung nicht,- bin schon ganz konfus :-(

Dabei ist es sicher einfach:

ICh lese eine DATETIME Tabelle aus.
Darin ist also ein Datum (auch mal das von Heute) in dem Format:

xxxx-mm-dd 00:00

Nun will ich mit einer Abfrage prüfen, ob ein Tag, der HEUTIGE Tag ist:

$datum=$row[termin_datum];
if($datum == date("Y-m-d")) {echo"Heute";}
Nur klappt das nicht!
Wohl, weil immer die Minuten auch mitgeprüft werden und nicht nur der Tag.
Aber wie muss ichs den machen??
Bitte um Hilfe!

ClaudiaGauss aus Wien

4 Antworten

0 Punkte
Beantwortet von Experte (6.4k Punkte)
<?

$datetimeEntry='2010-03-25 05:12';

// Datetime - Datum in array einlesen
preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/',$datetimeEntry,$datetimeEntryPart);

/*
INFO: Was wird wo gespeichert?

echo $datetimeEntryPart[0] ."<br/>". //Vollständiger Datumswert wie in Datetime
$datetimeEntryPart[1] ."<br/>". //Jahr
$datetimeEntryPart[2] ."<br/>". //Monat
$datetimeEntryPart[3] ."<br/>". //Tag
$datetimeEntryPart[4] ."<br/>". //Stunden
$datetimeEntryPart[5] ;. //Minuten
*/

//Aktuelles Datum in array einlesen
$datearray=explode("-",date("Y-m-d"));

/*
INFO: Was wird wo gespeichert?

echo $datearray[0]."<br/>"; //Jahr
echo $datearray[1]."<br/>"; //Monat
echo $datearray[2]."<br/>"; //Tag
*/

//Auf heutiges Datum prüfen
if ($datetimeEntryPart[1] == $datearray[0] && $datetimeEntryPart[2] == $datearray[1] && $datetimeEntryPart[3] == $datearray[2])
{ echo "Der DATETIME-Eintrag ist von heute!";}

?>



Oder in Kurzform, ohne alle Kommentare:
<?
$datetimeEntry='2010-03-25 05:12';

// Datetime - Datum in array einlesen
preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/',$datetimeEntry,$datetimeEntryPart);

//Aktuelles Datum in array einlesen
$datearray=explode("-",date("Y-m-d"));

//Auf heutiges Datum prüfen
if ($datetimeEntryPart[1] == $datearray[0] && $datetimeEntryPart[2] == $datearray[1] && $datetimeEntryPart[3] == $datearray[2])
{ echo "Der DATETIME-Eintrag ist von heute!";}

?>

Das müsste funktionieren...wenn ja, dann melde Dich als Member an, dann kannst Du mir 50 Punkte geben... ;-)

mfg, sup2010
0 Punkte
Beantwortet von Experte (6.4k Punkte)
ach ja...fast übersehen...verdammt,
PHP interpretiert Zahlen die mit 0 beginnen als Oktalzahlen, also werden zB die Zahlen 08, 09,... nicht auch als 8 oder 9 angesehen... "echo" stellt sie zwar visuell korrekt dar aber "printf" nicht, das solltest Du beachten und evt. ändern, musst Du halt mal testen. Oder vielleicht hat ja hier noch jemand einen Tip. Ich muss jetzt erstmal pennen... dann verzichte ich vielleicht besser auf die Bonuspunkte...
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)

$nur_datum = substr($row['termin_datum'],0,10);
$datum_teile = explode('-',$nur_datum);
if ( $datum_teile[0] == date('Y') && $datum_teile[1] == date('m') && $datum_teile[2] == date('d') )
{
// HEUTE
...
}


substr() gibt dir die ersten 10 Zeichen, also nur den Datumsteil zurück. explode() zerteilt den string YYYY-MM-DD in ein Array mit 3 Elementen ( YYYY,MM,DD ), die dann in der darauffolgenden Zeile mit dem aktuellen Datum verglichen werden
.
In mySQL kannst du auch folgendes machen:
SELECT .... , DATE(termin_datum) = CURDATE() AS ist_heute FROM ...

Dadurch hast du in deiner $row ein zusätzliches $row['ist_heute'], das den Wert 1 enthält, wenn termin_datum gleich dem aktuellen Datum ist ansonsten 0. Die Funktion DATE() gibt den Datumsanteil eines DATETIME-Feldes zurück, macht also im Prinzip dasselbe wie das substr() im obigen PHP-Code.
0 Punkte
Beantwortet von
DANKE euch beiden! Vielmals!!
Ich kenne mich aus.
Besondern dank an Supermax der mir schon mal wo geholfen hat :-)
...