Ich bin mir nicht sicher, wie ich meinen Datentyp als Datum / Uhrzeit oder Zeitstempel angeben soll. Ich denke, ich brauche beide, aber für die verschiedenen Ereignisse. Meine Website verkauft Produkte und Dienstleistungen weltweit und verfügt auch über ein Kontosystem, über das sich Benutzer anmelden können. Bitte klären Sie Folgendes:
- Aktuelles Datum und Uhrzeit, zu der der Kunde Produkte von meiner Website kauft: Datum / Uhrzeit?
- Lieferdatum und -zeit basierend auf dem Ort und dem Datum / der Uhrzeit des Kaufs, berechnet von unserem System: Datum / Uhrzeit?
Letztes Mal, als sie sich in ihrem Konto angemeldet haben: Timestamp?
- Wie lautet der Code in PHP, um das Kaufdatum (aktuelles Datum) zu speichern und dann in der Datenbank zu speichern?
- Bitte erläutern Sie deren Verwendung, da ich nach dem Lesen vieler Erklärungen im Internet immer noch nicht alles richtig verstanden habe.
Antworten:
MySQL- Zeitstempel :
Sind in UTC gespeichert
Sie werden beim Speichern in UTC konvertiert und beim Abrufen wieder in Ihre Zeitzone konvertiert. Wenn Sie die Zeitzoneneinstellungen ändern , ändern sich auch die abgerufenen Werte.
Kann automatisch initialisiert und aktualisiert werden
Sie können den Standardwert und / oder den Wert für die automatische Aktualisierung auf festlegen
CURRENT_TIMESTAMP
Haben Sie eine Reihe von
1970-01-01 00:00:01 UTC
zu2038-01-19 03:14:07 UTC
Während MySQL datetime :
Was Sie aufbewahren, ist das, was Sie bekommen.
Haben Sie eine Reihe von
1000-01-01 00:00:00
zu9999-12-31 23:59:59
Werte außerhalb des Bereichs funktionieren möglicherweise - aber nur Werte innerhalb des Bereichs funktionieren garantiert .
Sie können Daten speichern, bei denen Tag oder Monat Null sind.
Dies ist die MySQL-Methode zum Speichern von Geburtstagen! Sie können das nicht mit a machen
TIMESTAMP
, mit der einzigen Ausnahme, dass der Wert Null von0000-00-00
.Sie können ungültige Daten im ALLOW_INVALID_DATES- Modus speichern, wenn Sie sie benötigen .
NOW()
In einigen Fällen können Sie den Standardwert auf festlegen. Die bevorzugte und natürlichere Methode zum automatischen Initialisieren und Aktualisieren von Daten ist jedochTIMESTAMP
.Und natürlich gibt es auch
DATE
undTIME
, die genau so funktionierenDATETIME
, aber natürlichDATE
kümmert es sich nicht um die Zeit undTIME
nicht um das Datum. Alle vier Datentypen funktionieren perfekt mit den zahlreichen Datums- und Uhrzeitfunktionen . Wenn Sie jedoch Datentypen mischen, sollten Sie die Konvertierungseffekte berücksichtigen .Nun zu Ihrer Frage: Sie sollten
DATETIME
überall verwenden. Nicht aus technischen Gründen, aber da Sie immer noch nicht wissen, wie MySQL funktioniert,DATETIME
ist die einfachere Wahl. Dies bedeutet, dass Sie vor dem Speichern den aktuellen Zeitstempel in PHP berechnen müssen. Dies ist so einfach wie:Die Datumsfunktion von PHP funktioniert wie folgt:
Das
"Y-m-d H:i:s"
Format ist das ein kompatibel mit MySQL und der zweite Parameter leer verlassen,date()
rufttime()
den Strom zu bekommen UNIX - Zeitstempel .Die Verwendung von a
TIMESTAMP
anstelle von aDATETIME
hat den Mehrwert, dass MySQL die Entscheidung über den aktuellen Zeitstempel übernimmt, und Sie können das Feld beim Einfügen / Aktualisieren überspringen. Da Sie jedoch bereits eine Abfrage senden und der Code zum Abrufen des aktuellen Zeitstempels in PHP minimal ist, können Sie mit SicherheitDATETIME
alles erledigen.Bezüglich des tatsächlichen Codes zum Speichern des PHP-Zeitstempels in der Datenbank sollten Sie sich PHP Data Objects ansehen. Wenn Sie immer noch unklar sind, fragen Sie stattdessen nach StackOverflow . Es gibt jedoch bereits fast 1,5.000 Fragen. Überprüfen Sie diese, bevor Sie sie stellen. Nur ein Hinweis, vorbereitete Aussagen sind, wie die coolen Kids es machen.
quelle
Date
, dass es ein reserviertes Wort für denDATE
Datentyp ist, und dass seltsame Dinge passieren können (abhängig von der MySQL-Version). Versuchen Sie also, es in so etwas umzubenennencreationdate
und sehen Sie, was passiert . Außerdem sollten Sie in PHPTIMESTAMP
Felder genauso behandeln wieDATETIME
Felder, das spielt eigentlich keine Rolle. Ihr Format ist das gleiche.Referenz aus diesem Artikel entnommen:
Die Hauptunterschiede:
TIMESTAMP wird verwendet, um Änderungen an Datensätzen zu verfolgen und jedes Mal zu aktualisieren, wenn der Datensatz geändert wird. DATETIME dient zum Speichern von spezifischen und statischen Werten, die von Änderungen in Datensätzen nicht betroffen sind.
TIMESTAMP ist auch von verschiedenen TIME ZONE-Einstellungen betroffen. DATETIME ist konstant.
TIMESTAMP konvertierte die aktuelle Zeitzone intern in UTC, um sie zu speichern, und konvertierte sie während des Abrufs zurück in die aktuelle Zeitzone. DATETIME kann das nicht.
Von TIMESTAMP unterstützter Bereich: '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC DATETIME unterstützter Bereich: '1000-01-01 00:00:00' bis '9999 -12-31 23:59:59 ′
quelle
Nun, ich sehe das auf sehr einfache Weise. In Ihrem Fall würde ich beide
datetime
und verwendentimestamp
. Wenn Sie beide verwenden, haben Sie keine zusätzlichen Probleme beim Speichern von Daten oder Ähnlichem. Ein zusätzliches Feld (Spalte) in Ihrer Tabelle ist ebenfalls kein großes Problem.Aus meiner Sicht und aus meinen bisherigen Erfahrungen verwende ich also normalerweise beide. Wenn Sie Ihrem Besucher ein Datum anzeigen oder es für Besucher verständlich machen möchten, zeigen Sie ein Datum im Datums- / Uhrzeitformat an.
Das Datum / Uhrzeit-Format kann problematisch sein, wenn Sie etwas berechnen möchten (Unterschied zwischen 2 Datumsangaben, Abrufen des gestrigen Datums vom aktuellen Datum, Abrufen des aktuellen Datums von 1 Woche vom aktuellen Datum, Abrufen des morgigen Datums oder dergleichen) müssen sie konvertieren
timestamp
und dann das Zeug tun. Und ja aktuelle Datumszeit zum Beispiel bekommen Sie mit:$current = date("Y-m-d");
oder$current = date("Y-m-d H:i:s");
wenn Sie auch Stunden, Minuten und Sekunden wollen.Der Zeitstempel ist nur eine elfstellige Zahl, die eigentlich nichts "bedeutet". Wenn Sie es betrachten, wissen Sie nicht, welches Datum es darstellt. Es ist also nicht wirklich benutzerfreundlich und Sie können es nicht verwenden, um es einfach wiederzugeben und es beispielsweise Ihren Besuchern zu zeigen. Sie müssen es in etwas Lesbares "transformieren". Es bietet Ihnen aber auch die Möglichkeit, es einfach umzurechnen und verschiedene Daten zu berechnen. Wenn Sie beispielsweise den Zeitstempel für morgen gleichzeitig abrufen möchten, müssen Sie dem aktuellen Datum nur die Anzahl der Sekunden hinzufügen und haben den Zeitstempel für morgen. Beispiel:
$tomorrow = time()+24*3600;
Sie können auch leicht einen Unterschied zwischen zwei Daten in Sekunden oder etwas Ähnlichem feststellen.Daher würde ich vorschlagen, sowohl Datums- als auch Zeitstempel zu verwenden. Selbst wenn Sie beispielsweise PhpMyadmin verwenden und einige Daten schnell anzeigen möchten, ist es für Sie einfacher, wenn Sie ein Datum im Datums- /
2011-12-20 10:15:20
Uhrzeitformat (Beispiel :) sehen, wie es der Fall ist, wenn Sie nur die 11-stellige Zahl betrachten. Verwenden Sie also beide und rufen Sie dann an und verwenden Sie diejenige, die besser zu Ihnen passt.Wenn Sie nur einen auswählen müssen oder möchten, würde ich vorschlagen, dass der Zeitstempel ansonsten beide verwendet.
quelle
Timestamp is just a number 11 digit long which doesn't really "mean" anything
MySQL-Zeitstempel werden im selben Format wie datetime gespeichert. Sie müssen sie auch in PHP-Zeitstempel konvertieren, um die von Ihnen beschriebenen Berechnungen durchzuführen, ODER einfach die vielen Datums- / Zeitfunktionen von MySQL verwenden und die Berechnungen in der Datenbank durchführen. Deine Antwort macht eigentlich keinen Sinn.