2009-06-01 7 views
1

Meine Datenbanktabelle enthält eine Spalte mit SQL-Zeitstempeln (z. B. 2009-05-30 19:43:41). Ich brauche den Unix-Timestamp Äquivalent (eine ganze Zahl) in meinem PHP-Programm.Gibt es eine einfache Möglichkeit, einen Unix-Zeitstempel von einem SQL-Zeitstempel in PHP zu bekommen?

$posts = mysql_query("SELECT * FROM Posts ORDER BY Created DESC"); 
$array = mysql_fetch_array($posts); 
echo $array[Created]; 

Wo es jetzt den SQL-Zeitstempel echauffiert, möchte ich einen Unix-Zeitstempel. Gibt es einen einfachen Weg, dies zu tun?

Antwort

12

strtotime() wird gerne einen SQL-Zeitstempel nehmen und wandelt es in UNIX Zeit:

echo strtotime($array['Created']); 

Beachten Sie, dass es eine schlechte Praxis ist nicht in Anführungszeichen Ihres Array-Schlüssel zu verwenden. According to the docs:

Verwenden Sie immer Anführungszeichen um einen String-Literal-Array-Index. Zum Beispiel ist $ foo ['bar'] korrekt, während $ foo [bar] nicht korrekt ist.

Das ist falsch, aber es funktioniert. Der Grund ist, dass dieser Code eine undefinierte Konstante (Balken) und keine Zeichenfolge ("Balken" - beachten Sie die Anführungszeichen) hat. PHP kann künftig Konstanten definieren, die leider für einen solchen Code den gleichen Namen haben. Es funktioniert, weil PHP eine leere Zeichenfolge (eine nicht mit einem bekannten Symbol übereinstimmende Zeichenfolge ohne Anführungszeichen) automatisch in eine Zeichenfolge konvertiert, die die leere Zeichenfolge enthält. Zum Beispiel, wenn es keine definierte Konstante benannte Bar gibt, wird PHP in der Zeichenfolge 'bar' ersetzen und verwenden Sie das.

+1

Ich wünschte, ich könnte Ihnen einen zusätzlichen +1 für den Array-Schlüssel Kommentar geben. –

1

ein reguläres Datetime-Feld gegeben, können Sie dies mit der MySQL-Funktion UNIX_TIMESTAMP() in Abfrage tun:

$posts = mysql_query("SELECT * 
          , UNIX_TIMESTAMP(Created) 
         FROM  Posts 
         ORDER BY Created DESC"); 

Sie sollten auch beide für eine Abfrage Tasten numerische assoziativen dass die PHP-Funktion mysql_fetch_array kehrt wissen Ergebnis. Ich finde diese redundant, so Ich mag mehr spezifischere und Nutzen sein:

$array = mysql_fetch_array($posts, MYSQL_ASSOC); 

Auch und als @Paolo Bergan angegeben, unter Angabe Ihrer Echo wäre eine gute Entscheidung:

echo $array['Created']; 

Eine letzte Kommentar, Sie verwenden "SELECT *" - it is worth reading discussion on the pros and cons of "SELECT *" syntax.

+0

Ich bevorzuge mysql_fetch_assoc anstatt das zweite Argument an mysql_fetch_array übergeben –

+0

@ Paolo guten Punkt - eine andere Möglichkeit, es zu tun. – artlung

+0

Ich würde mich definitiv für diese Methode entscheiden, persönlich. strtotime() ist genial, aber es funktioniert nicht immer (einige Datumstrings sind mehrdeutig). UNIX_TIMESTAMP() hingegen funktioniert garantiert. –

Verwandte Themen