it-swarm.com.de

Zeitstempel aus Datenbank holen

Ich habe Daten in einer DB-Tabelle mit einem automatischen Zeitstempel gespeichert. In einem Modul möchte ich dann ein Ergebnis basierend auf dem neuesten Zeitstempel anzeigen.

Es funktioniert nicht und ich erhalte eine Fehlermeldung

Warning: strtotime() expects parameter 1 to be string

Die Abfrage, die ich geschrieben habe, ist:

//Get Latest Update TimeStamp
$db = JFactory::getDBO();
$query = "SELECT MAX( timestamp )  
          FROM #__service_status ORDER BY timestamp DESC LIMIT 1";
$db->setQuery( $query);
$timestamp = strtotime($db);

Dann versuche ich es zu wiederholen mit:

<?php echo date("m-d-Y", $timestamp);?>
4
RustyJoomla

Sie müssen dies in Ihren Code nach $ db-> setQuery ($ query) einfügen.

$db->setQuery( $query);
$var1= $db->loadResult();
$timestamp = strtotime($var1);

Ich hoffe das hilft

3
Piero Marsilio

MySQL bietet bereits die entsprechenden Tools, um Ihren Zeitstempelwert neu zu formatieren. Daher empfehle ich dringend, dass Sie DATE_FORMAT () um Ihren MAX() -Aufruf setzen.

SELECT DATE_FORMAT(MAX(timestamp), '%m-%d-%Y') AS `formatted` FROM `service_status`

SQLFiddle Demo

MAX() liefert eine prägnantere Abfrage als ORDER BY timestamp DESC LIMIT 1, die auch die gewünschte Ausgabe liefert.

SELECT DATE_FORMAT(timestamp, '%m-%d-%Y') AS formatted FROM `service_status` ORDER BY timestamp DESC LIMIT 1

Die Lektionen zum Mitnehmen sind:

  1. Sie benötigen nicht die redundante Logik von MAX() und ORDER BY timestamp DESC LIMIT 1.
  2. Sie können ein paar PHP-Datums-Funktionsaufrufe (nämlich: strtotime() & date()) sparen, indem Sie Ihre Abfrage neu formatieren.

Das fertige Backprodukt kann so aussehen:

$db = JFactory::getDBO();
try {
    $query = $db->getQuery(true)
                ->select("DATE_FORMAT(MAX(timestamp), '%m-%d-%Y')")
                ->from("#__service_status");
    // echo $query->dump();  // uncomment if you want to see what is generated
    $db->setQuery($query);
    if (!$result = $db->loadResult()) {  // declare $result then check for a "falsey" value
        echo "No Rows Found";
    } else {
        echo "Last update was $result";
    }
} catch (Exception $e) {
    echo "Syntax Error"; // , $e->getMessage();  // <- don't show these details publicly
}

* Da nur ein einziger Wert zurückgegeben wird, habe ich den Spaltenalias entfernt, den ich zum ersten Mal in meiner unformatierten SQL-Abfrage erwähnt habe - loadResult() ist es egal, wie das Feld heißt.

* timestamp ist ein mysql-SCHLÜSSELWORT, aber es ist kein RESERVIERTES SCHLÜSSELWORT, sodass es nicht in Backticks eingeschlossen werden muss .

1
mickmackusa