Webdesign in Siegen

Datum vergleichen?

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Datum vergleichen?

Beitragvon Guillermo am 22.07.2008, 18:57

Hallo Leute,

also ich hab schon gegrübelt und gesucht aber nichts wirklich,für mich richtiges, gefunden...
Und zwar ist das mein Problem: Ich will ein gespeichertes Datum in der MySQL Datenbank (Date - Format) mit dem Heutigen vergleichen, ist es älter soll es gelöscht werden, und ist es 1 oder 2 Wochen jünger, dass soll es ausgegeben werden...
Ist das irgendwie einfach möglich, oder sollte ich das selbst schreiben mit Jahr/Monat/Tag vergleichen? Diese Variante wäre in der Hinsicht schwieriger , dass ich z.b. wenn ich den 20. des Monats haben 14 Tage (2wochen) nach vorne gehen müsste, und dann müsste ich noch miteinkalkulieren welcher Monat (ob 30 oder 31 tage), usw...
Also wie gesagt gibt es da irgendwas einfaches? Ich hab da beim stöbern mal etwas von "UNIX-ZEiT" oder irgendwas gelesen
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Mitglied
 
Beiträge: 486
Registriert: 01.10.2007, 18:18
Wohnort: Auerbach i.d.Opf

Re: Datum vergleichen?

Beitragvon Eyecatcher am 22.07.2008, 19:06

Du wandelst das Datum einfach in einen Timestamp um, oder du speicherst das Datum gleich als Timestamp, ist immer meine bevorzugte Methode (Alle Informationen in einer Zahl und du kannst problemlos hin und her konventieren).
Code: Alles auswählen
$mitternacht = mktime(0,0,0);

Damit krichste den Timestamp von 0:00 Uhr am heutigen Tage raus, genauso kannste bei mktime() auch noch den Wunschtag reinschreiben (s. PHP Dokumentation) und dann haste deinen Vergleich.
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 421
Registriert: 01.03.2008, 21:56
Wohnort: NRW

Re: Datum vergleichen?

Beitragvon Guillermo am 22.07.2008, 19:27

Hmm? Kannst du das nochmal erklären bitte habs net so ganz verstanden ...
Ich hab mich mit dem hier versucht :
Code: Alles auswählen
$anfrage="SELECT * FROM klausuren";
$ausfuehren = mysql_query($anfrage);
while ($zeiger = mysql_query($ausfuehren))
{
   $id = $zeiger -> id;
   $datum = $zeiger -> datum;
   $fach = $zeiger -> fach;
   
   $datum_heute = new DateTime('today');
   $datum_klausur = new DateTime($datum);
   $datum_anzeigen = clone $datum_heute;
   $datum_anzeigen->modify('14 days');
   
   if ($datum_klausur->format( "U" ) < $datum_anzeiger->format( "U" ) && $datum_klausur->format( "U" ) > $datum_heute->format( "U" ))
   echo $id ." ".$datum. " ".$fach;
}


Irgendwie gehts aber net, aber kann ich mit dem Ansatz weitermachen oder geht das nicht bzw wo sind hier meine Fehler?
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Mitglied
 
Beiträge: 486
Registriert: 01.10.2007, 18:18
Wohnort: Auerbach i.d.Opf

Re: Datum vergleichen?

Beitragvon Guillermo am 22.07.2008, 19:40

Alles klar, es hat geklappt, hab ein paar Fehler da oben gehabt , jetzt siehts so aus und funktioniert auch, habe in der MySQL Tabelle das Format "DATETIME"

Code: Alles auswählen
//Sucht alle eingetragenen Klausuren
$anfrage="SELECT * FROM klausuren";
$ausfuehren = mysql_query($anfrage);

//Schleife beginnt
while ($zeiger = mysql_fetch_object($ausfuehren))
{
   $id = $zeiger -> id; echo $id ; echo "<br>";
   $datum = $zeiger -> datum;
   $fach = $zeiger -> fach;
   
//Heutiges Datum wird erzeugt
   $datum_heute = new DateTime('today');
//Datum der Klausur wird durch das Datum oben als Objekt erzeugt
   $datum_klausur = new DateTime($datum);
//Datum_Heute wird geklont, und dann um 14 nach vorne geschoben
   $datum_anzeigen = clone $datum_heute;
   $datum_anzeigen->modify('14 days');

//Falls die Klausur vor dem Anzeigetermin ist und nach dem heutigen Tag, dann wird es ausgegeben.   
   if ($datum_klausur->format( "U" ) < $datum_anzeigen->format("U") && $datum_klausur->format( "U" ) > $datum_heute->format( "U" ))
   echo $id ." ".$datum. " ".$fach;

//Falls das Datum der Klausur vor heute  ist, dann wird es gelöscht (hier in Form von 'echo "Löschen"' dargestellt)
if ($datum_klausur->format("U") < $datum_heute->format("U"))
   {
      echo $id ." ".$datum. " ".$fach;
      echo "Löschen <br>";
   }
}


Hab gesehn dass viele Leute sowas suchen, damit man einfach 2 Daten vergleichen kann, sollte ich ein kurzes Tutorial dazu verfassen, wie seht ihr das, oder is das nicht notwendig?
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Mitglied
 
Beiträge: 486
Registriert: 01.10.2007, 18:18
Wohnort: Auerbach i.d.Opf

Re: Datum vergleichen?

Beitragvon Basti am 22.07.2008, 19:49

Wieso hantierst du denn so umständlich mit Klassen herum? Die Klasse wird zuerst zweimal initialisiert und dann sogar in einem Fall noch geklont, verstehe da gerade nicht so den Sinn hinter.

Die Grundstruktur ist doch relativ unspektakulär:
Code: Alles auswählen
<?php

$now = time(); // aktueller Timestamp
$period = $now + (14 * 86400); // Timestamp für die nächsten zwei Wochen

// abgelaufene Einträge entfernen
mysql('DELETE FROM klausuren WHERE datum<'.$now);

// aktuelle Einträge abrufen
$result = mysql_query('SELECT id, fach, time FROM klausuren WHERE time<'.$period);

while($row = mysql_fetch_assoc($result))
{
  echo $row['id'].' '.date('d.m.Y',$row['datum']).' '.$row['fach'];
}

?>


Das wäre jetzt die Lösung für die Variante mit Timestamp in der Datenbank, die meiner Meinung nach am einfachsten und besten ist, da man beispielsweise bei den zwei Wochen einfach die entsprechende Sekundenzahl vom aktuellen Timestamp abziehen oder auf ihn addieren kann. So muss man sich keine Gedanken um Monatswechsel etc. machen.
Bei dem DATE-Format kann man zwar genauso mit den größer/kleiner-Operatoren arbeiten, dafür muss man aber immer wieder zusätzliche Berechnungen bei Monatsüberschneidungen durchführen lassen. PHP bietet dafür sogar extra Funktionen.
Die Variante mit dem Timestamp ist aber wesentlich einfacher und bietet sogar mehr Flexibilität bei der Datumsausgabe.

Achja, in dem von dir geposteten Code hast du übrigens in der while-Bedingung auch ein mysql_query() verwendet, vermutlich sollte es aber ein mysql_fetch_object() sein, oder? Ich nehme dort aber lieber mysql_fetch_assoc() bzw. mysql_fetch_array(), da die Array-Schreibweise wie ich finde übersichtlicher ist.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste