it-swarm.com.de

Formatieren eines SQL-Zeitstempels mit PHP

Ich habe eine mySQL-Datenbank mit einem Zeitstempelfeld. Während ich teste, hat es derzeit nur einen Eintrag

2010-02-20 13:14:09

Ich ziehe aus der Datenbank und verwende

echo date("m-d-Y",$r['newsDate'])

Mein Endergebnis zeigt als

12-31-69

Weiß jemand warum?

Edit: Editit: Ignorieren diese Bearbeitung ... das FTP-Addon für notepad ++ ist abgelaufen und zeigt leider keinen Fehler an, wenn es nicht synchronisiert werden kann.

19

Die Funktion dateNAME_ erwartet als zweiten Parameter einen UNIX-Zeitstempel . Das heißt, Sie müssen das Datum, das Sie von der Datenbank erhalten, in einen UNIX-Zeitstempel konvertieren. Dies kann mit strtotimeNAME_ erfolgen:

$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);

Und du bekommst:

02-20-2010


Sie haben den String '2010-02-20 13:14:09' an die Funktion dateübergeben; Diese Zeichenfolge ist kein gültiger UNIX-Zeitstempel.

'12-31-69 'ist wahrscheinlich 1970-01-01 in Ihrem Gebietsschema; und 1970-01-01 ist die Epoche - das Datum, das dem 0 UNIX-Zeitstempel entspricht.

48
Pascal MARTIN

Für den Anfang erwartet die Funktion php date() Sekunden als zweite Variable. Das erklärt, warum dein Datum falsch angezeigt wird. Überprüfen Sie diese Quelle zu diesem Problem.

Was uns dann die Antwort auf das Problem gibt, um PHP das Datum aus einem SQL-Zeitstempel korrekt zu formatieren, ändern wir einfach die Abfrage ein wenig ...

SELECT author, `when`

Ändern Sie es in ...

SELECT author, UNIX_TIMESTAMP(`when`)

Verwenden Sie dann die Funktion PHP date mit der Variable, die das Ergebnis der obigen SQL-Abfrage speichert. 

4
Urda

Sie können stattdessen einfach die MySQL-Funktion date_format () verwenden:

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....

Dies erspart Ihnen, Ihren Zeitstempel in die Unix-Zeit und dann wieder in einen normalen Datums-String in PHP zu überführen. Ein datetime-Formatierungsaufruf statt zwei.

1
Marc B

ich denke, das wird für Newble nützlich sein:

beispiel: Basis-Subtraktion 1 Stunde ab Datum aus dem MYSQL-Format:

$to='2013-25-10 22:56:00'; //curr time
$timestamp = strtotime($to); //convert to Unix timestamp
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds)
echo date("Y-m-d H:i:s",$timestamp); //show new date
1
qant

ok, ich habe eine Woche lang damit gerungen (länger aber ich habe eine Pause davon genommen).

Ich habe zwei spezifische Felder in Tabellen

 creationDate> Zeitmarke> aktuelle_Zeitmarke 
 editDate> Zeitmarke> aktuelle_Zeitmarke 

sie zogen entweder am 31. dezember 1969 aus oder einfach nichts ... ärgerlich ... sehr ärgerlich

in MySQL Abfrage habe ich:

            unix_timestamp(creationDate) AS creationDate
            unix_timestamp(editDate) AS editDate

in PHP konvertierte ich:

    $timestamp = $result_ar['creationDate'];
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp)
            echo($creationDate);

    $editstamp = $result_ar['editDate'];
    $editDate = date("Y-M-d (g:i:s a)", $editstamp)
            echo($editDate);

dies löste mein Problem für mich zurück

            2010-Jun-28 (5:33:39 pm)
            2010-Jun-28 (12:09:46 pm)

beziehungsweise.

Ich hoffe das hilft jemandem raus ..

0

BEARBEITEN: Nach der Überprüfung scheint MySQL eine timestamp als Zeichenfolge an PHP zurückzugeben, daher war diese Antwort falsch. :)

Der Grund, warum Sie 1969 ein Datum erhalten, ist wahrscheinlich, dass Sie eine Null-Unix-Zeit von UTC in Ortszeit umrechnen. Die Unix-Zeit ist die Anzahl von Sekunden seit 1970. Ein Wert von 0 bedeutet also 1970. Sie leben wahrscheinlich in einer Zeitzone mit negativem Offset wie GMT-6, die schließlich 31-12-69 ist.

0
Andomar