Datumsformat umwandeln (von amerikanisch nach deutsch)

Schon festgestellt? Dem Forum sind gerade alle Interaktionsmöglichkeiten genommen. :(

Mehr dazu unter: Abstimmung über das Forum

  • Früher hat man es so gelöst (Deutsche Anzeige: 16.12.2021, statt amerikanische Anzeige: 2021-12-16):

    Code
    1. $mysql = "SELECT DATE_FORMAT (datum, ?%e.%m.%y?) AS datum FROM tabelle;"; ?>


    Wie macht man es aber mit der neuen Technik (OOP usw.)? - wo die Daten wie folgt abgefragt werden:

    Code
    1. // Prepare the SQL statement and get records from our contacts table, LIMIT will determine the page
    2. $stmt = $pdo->prepare('SELECT * FROM contacts ORDER BY id LIMIT :current_page, :record_per_page');
    3. $stmt->bindValue(':current_page', ($page-1)*$records_per_page, PDO::PARAM_INT);
    4. $stmt->bindValue(':record_per_page', $records_per_page, PDO::PARAM_INT);
    5. $stmt->execute();
    6. // Fetch the records so we can display them in our template.
    7. $contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
  • Ein Weg ist es, die Daten weiter in einem technischen Format zu halten (so abfragen wie sie aus der Datenbank kommen.
    Danach kannst du dise auch genau so Weiterverarbeiten.


    Meine Persönliche Empfehlung ist PDO::FETCH_OBJECTstatt PDO::FETCH_ASSOC zu verwenden. Das ist aber nur eine Präferenz meinerseits und ändert quasi nichts am folgenden Code beispiel.
    Außerdem würde ich Empfehlen code immer englisch zu halten, dazu gehören auch Datenbanktabellenspalten & Namen.


    In jedem fall geht der Code dann so weiter:

    PHP
    1. //$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
    2. $contacts = [];
    3. foreach($stmt->fetchAll(PDO::FETCH_OBJECT) as $row){
    4. //hydrate values from the database to their respective data type
    5. $row->date = new \DateTime($row->date);
    6. $row->is_active = (bool) $row->is_active;//hier noch ein beispiel wie man das noch nutzen kann
    7. $contacts[] = $row;
    8. }

    Das erlasubt dir z.B. jetzt relativ einfach Vergleiche der Daten durchzuführen und eben mit den Daten zu arbeiten ohne immer ein strtotime()aufrufen zu müssen.


    Und dann in deiner View-Datei oder wo auch immer du das Datum ausgeben willst:

    PHP
    1. <?php foreach($contacts as $contact):?>
    2. Datum: <?=$contact->date->format('d.m.Y')?>
    3. <?php endforeach?>
  • Ok, aber dann müsste ich wohl meine Codezeile 2 aufteilen oder auseinander nehmen?

    Ja, wenn du es so machen willst, musst du statt SELECT * FROM alle deine Felder einzeln aufzählen:SELECT firstname, lastname, DATE_FORMAT(date, ?%e.%m.%y?) as date, is_active FROM.
    Es gibt hier noch einen hacky weg, der ist aber nicht zu empfehlen: SELECT *, DATE_FORMAT(date, ?%e.%m.%y?) as date FROM hier macht man sich zu nutze das MySQL wenn das selbe feld mehrfach abgefragt wird immer das letzte dieser mehrfach felder genutzt wird (dein * enthält ja schon einmal date und dann überschreibst du dieses original date mit deinemm DATE_FORMAT(date, ?%e.%m.%y?)).