2010-12-07 14 views
2

Ok, ich bin ein bisschen verwirrt. Ich arbeite an einem Projekt, das einige time() in der Datenbank speichern muss. Es scheint mir, dass ich für eine bessere Flexibilität es als Zeitstempel speichern sollte, so dass ich die Operation zwischen 2 mal und anderen coolen Sachen machen konnte. Aber ich habe gesehen (hier mehr als überall sonst), dass viele Leute Zeit in Datenbanken im Datumsformat speichern, was zu einigen allgemeinen Fragen führt: Wie kann ich das Datumsformat im Zeitstempel konvertieren? oder wie kann ich ein Datum zu einem anderen Datum abziehen, das ein anderes Datumsformat hat? usw.Zeit, wie man es speichert

Bin ich falsch mit Zeitstempeln und wandle es später (um dem Benutzer angezeigt zu werden) um Zeitformat? Mysql-Datenbank.

+0

Welche Datenbank? – Gordon

+0

und welches ist die DB? :-) Gordon war schneller! – acm

+0

http://snippets.dzone.com/posts/show/1455 –

Antwort

1

Ich neige dazu, Zeitstempel in int zu speichern (10) Format, wie ein UNIX-Zeitstempel immer 10 Zeichen lang sein . Es wird empfohlen, int anstelle von varchar oder char zu verwenden, da bei Verwendung der ORDER-Syntax von SQL die Reihenfolge nicht korrekt ist.

Angenommen, Sie möchten von einem Datum in einen Zeitstempel konvertieren, können Sie entweder strtotime oder mktime verwenden, je nachdem, was Sie tun.

Um den Unterschied zwischen zwei Zeitstempeln herauszufinden, subtrahieren Sie sie einfach voneinander.

Für das Problem der Zeitzonen können Sie dies mit date_default_timezone_set auf das Land des Benutzers einstellen. Dies wird berücksichtigt, wenn Sie Funktionen wie date

+1

Die Datenbank hat einen nativen Datentyp, der nicht vom [y2k38-Problem] (http://en.wikipedia.org/wiki/Year_2038_problem) betroffen ist, während das Speichern von Zeitstempeln (da es eine 32-Bit-Nummer ist) ... – ircmaxell

+0

Die meisten Webanwendungen sind gebaut, um nur eine Anzahl von Jahren zu dauern, wahrscheinlich maximal 5. Es gibt nur eine Handvoll Anwendungen, die Zeitstempel nach dem Jahr 2038 verwenden müssen. Ich würde die Anwendung eher als effizient und nicht als vollständig zukunftssicher gestalten, sie kann immer näher an die Zeit angepasst werden, wenn sie noch existierte. – RichW

+2

Das ist die Art von Denken, die uns in das y2k-Problem gebracht hat. Während ich zustimme, dass die Sorge um y2k38 jetzt albern ist, existiert die Lösung, und sie ist nicht weniger effizient als Ihr Vorschlag (in der Tat, da die Datumsarithmetik in kompiliertem C ausgeführt wird, wage ich zu sagen, dass es wahrscheinlich weitaus effizienter ist). Es gibt also keinen wirklichen Grund * nicht * die nativen Datentypen zu verwenden ... – ircmaxell

1

Gerade falls Sie nicht wissen, MySQL Funktionen mehr Daten unterstützt, DATESUB, DATEADD usw.

+0

Ich habe den Sinn dieser Antwort nicht verstanden. – Shoe

+1

Der Punkt ist, dass Sie eine Vielzahl von Datumsarithmetik (mit Rücksicht auf Zeitzonen, Datum Barrieren, Schaltjahren, etc.) mit SQL Date/DateTime Datentypen, die noch einfacher zu bedienen als viele kryptische Arithmetik sein können in Ihren 'WHERE'-Klauseln (um dasselbe mit einem Zeitstempel zu erreichen). – svens