Wie funktioniert dieses kurze Datums-Skript?

Don Stefano

Erfahrenes Mitglied
Hallo zusammen,

ich suche nun schon stundenlang hier im Forum, aber kann mein Problem nicht lösen.

Eigentlich soll nichts anderes geschehen, als dass ich das folgende Skript so umschreibe, dass die Jahreszahl nicht vierstellig (2006) sondern zweistellig (06) in einer Tabelle ausgegeben wird.

Leider habe ich dieses Skript im Rahmen eines größeren Projektes nicht selbst geschrieben und verstehe es auch nicht ganz:

Meine Fragen findet ihr unter dem folgenden PHP-Skript, welches Zeitfunktionen zur Verfügung stellt. Meine Fragen beziehen sich auf den Teil ganz unten, und die Funktion "wandleDatumDt".

PHP:
<?php

//gibt das Erstellungsdatum zurueck
  function erstellungsDatum(){
  return date("y")."-".date("m")."-".date("d");  //im mysql-format
}

/*wandelt Datum in MySQL-Standard um*/
  function wandleDatum($tag, $monat, $jahr)  {
  $check1=checkdate($monat, $tag, $jahr);
  if ($check1 == 1){
     $neuDatum=$jahr."-".$monat."-".$tag;
     return $neuDatum;    //neues Datumsformat 0000-00-00 zurueckgeben
  }
  else
      return 0; //ansonsten ist die ueberpruefung fehlgeschlagen, falsches Datum
  }
  
  /*wandelt amerikan./mysql-Datum in Dt.Standard um */
  function wandleDatumDt($datum)  {
    if(!empty($datum)){
       $feld=explode("-",$datum);
       return $neuDatum=$feld[2].".".$feld[1].".".$feld[0];
    }
    else return $datum;
  }
  
?>
Aus der Datenbank wird nun ein Datum in der Form JJJJ,MM,TT ausgelesen und in deutsches Datumformat umgewandelt mit der Funktion "wandleDatumDt".
PHP:
 $row['l_beginn']=wandleDatumDT($row['l_beginn']);
Anschließend wird das Ganze in einem echo-Tag in einer Tabelle ausgegeben:
PHP:
<td>".$row['l_beginn']."</td>
Ich hätte aber gern, dass das Datum (im Platz zu sparen) in der Tabelle nur im (deutschen) Format TT.MM.JJ ausgegeben wird anstatt wie derzeit als TT.MM.JJJJ.

Wer kann mir helfen uns sagen, wie ich den obigen PHP-Code, der die Funktion "wandleDatumDt" definiert abändern muss, um dieses Ziel zu erreichen.

Tausend Dank!
 
PHP:
  /*wandelt amerikan./mysql-Datum in Dt.Standard um */
  function wandleDatumDt($datum)  {
    if(!empty($datum)){
       $feld=explode("-",$datum);
       return $neuDatum=$feld[2].".".$feld[1].".".substr($feld[0], 2);
    }
    else return $datum;
  }
Allerdings sollte es auch möglich sein, die Formatierung auch schon bei der Datenbankabfrage durchzuführen. Hast du die zufällig zur Hand?
 
Probiere es einmal so!

PHP:
<?php
     $sql = mysql_query("SELECT 
                               DATE_FORMAT(`Datum`,'%d%m%y') AS `datum`
                         FROM 
                               `nd_tabelle`")OR DIE(MYSQL_ERROR());
?>
 
Vielen lieben Dank,

das klappt. Und so einfach! Da hätte ich eigentlich auch irgendwie selbst drauf kommen können.

Hier einmal die Datenbankabfrage.

PHP:
$sql=mysql_query("SELECT * FROM rp_lauf WHERE NOT(l_status='archiv') ".$sort." DESC LIMIT ".$anfangsposition.",".$zeilenProSeite."");
 if ($sql) {
   while($row=mysql_fetch_array($sql)){
     //Ausgabe 
   //dafuer erstmal die IDs und Datumsangaben richtig anzeigen, d.h. mit namen und im dt. Datumsformat
   $eDatum=wandleDatumDT($row['l_eDatum']);
   $nutzerName=wandleBenutzerID($row['nutzer_id'])
....;
Wo wäre denn der Vorteil, die Formatierung gleich hier vorzunehmen?
Ich schätze ich muss davon aber eh Abstand nehmen, da die Funktion an Aberdutzenden Stellen verwendet wird und ich dann ja alle Querys anpassen müßte.

Dennoch wäre ich neugierig darauf wie das geht, und wo der Vorteil wäre (was ich heute weiß, muss ich nächstens nicht mehr erfragen;-))

Nochmals vielen Dank
 
Der Wechsel auf die MySQL-interne Formatierung der Daten erfordert vor allem der Austausch oder zumindest eine Erkänzung des Universal-Selektors (*). Den Universal-Selektor tatsächlich anzuwenden, ist übrgens nicht sehr empfehlenswert (die de.comp.lang.php-Newsgroup hat dazu eine aufschlussreiche Erklärung gegeben).
 
Nochmals Danke!

Auch für die Aufklärung über den Selektor * und die suboptimale Effizienz einer solchen Abfrage.

Wie bereits erwähnt werde ich die ganzen Querys (es müssen mehrere Dutzend sein) nicht mehr alle ändern können.

Ich habe außerdem einige Querys, in denen bis zu 60 Werte aus einer Tabelle abgefragt werden. Wäre es da wirklich noch effektiv all diese Variablen einzeln aufzuführen? Zumal bis auf eine oder zwei auch alle Daten benötigt werden? Ich denke nicht wirklich.

Dennoch werde ich künftig bei meinen Querys (zumindest wo es etwas weniger Variablen sind) eure Optimierungsvorschläge beherzigen.
 
Zurück