Tom: nur Datensätze der nächsten 2 Wochen ausgeben

Beitrag lesen

Hello,

Ok Daumsfeld ist Varchar. Wie schon gesagt speichere ich das Datum im Format 31.11.03 ab und genauso stehts auch in der DB und auch nicht 311103 oder irgendwie anderser sonder nur so. Leider weil die weil es ja das Datum ist wann das Seminar anfängt. Kann ich das Datum vielleicht umwandeln wenn ich es abspeichere? Oder gibt es eine andere Alternative?

Da gibt's verschiedene Philosophien (darf man das eigentlich inzwischen mit F schreiben?):

Datum in drei Feldern erfassen und ausgeben. Dann kann man es auch einfacher überprüfen. Oder sich mal die Funktion strtotime() anschauen. Die leistet auch schon einiges.

Oder eben eine eigene Funktion schreiben für die Datumsvalidierung und Wiederherstellung (Anzeige).

In der DB sollte es wegen der Vergleichbarkeit aber mindestens im ANSI-Format  20031231 für den 31.12.2003 abgespeichert werden. Und da ist doch der Schritt zu 2003-12-31 auch nicht mehr weit. Damit kann die DB dann leben.

Ich würde eine neue Spalte mit dem Typ Datetime einführen und der den Wert aus der alten zuweisen.

alter table <tabellenname> add <spaltenname> datetime;
update <tabellenname> set <spaltenname> = concat("20",substring(<altesplate>,7,2),"-",substring(<altespalte>,4,2),"-",substring(<altespalte>,1,2));

nach einem kontollierenden Select...
alter table <tabellenname> drop <altespalte>;
alter table <tabellenname> change <spaltenname> <altespalte> datetime;

Probiers bitte vorher an einer Testtabelle aus.
Aber so müsste das Konvertieren klappen.

Die Eingabe kannst Du ja torzdem so lassen, musst dann eben vor dem Speichern nur eine Konvertietung des Feldinhaltes durchführen:

data[startdat] ist das textfeld im form

if (isarray($_POST["data"]["startdat"]))
{
  $a_startdat = explode(".",$_POST["data"]["startdat"]);
}
if (count($a_startdat == 3))
{
  $date=array();
  if (strlen($a_startdat[2])==2)
  {
    $date[year]="20".$a_startdat[2];
  }
  elseif(strlen($a_startdat[2])==4)
  {
    $date[year]=$a_startdat[2];
  }
  else
  {
    ## Fehlerbehandlung
    return false;
  }

## usw für Monat $date[1] und Tag $date[2]

}
else
{
  ## Fehlerbehandlung
}

$date = implode("-",$date);

---------------------------------

So ungefähr könnte Deine Funktion aussehen.
Man könnte dann auch noch einen checkdate() verwenden, um das Datum auf Validität zu prüfen.

bool checkdate ( int Monat, int Tag, int Jahr)

So müsstest Du aber zurecht kommen

Grüße

Tom