Ich habe ein Datum in der Datenbank gespeichert. Das Datum ist 2017-03-01. Das Feld ist ein "Datum" -Feld.
Wenn ich
benutze %Vor%In meiner MySQL-Abfrage wird "01.03.2017" angezeigt.
Wenn ich
benutze %Vor% und geben Sie es wie date('d.m.Y', $mydate)
Ich bekomme 28.02.2017 als Ergebnis.
Ist das ein "Februar-Problem"? Wie kann ich date () richtig machen?
----------------- Bearbeiten 1 -----------------
Ich habe das schon vorher in meinen Code eingefügt.
%Vor%----------------- Edit 2 -----------------
Ok, ich habe eine MySQL-Tabelle mit diesem Inhalt (Feldtyp: "Datum") erstellt:
%Vor%Generierte Ausgabe von meinem Skript:
%Vor%Aktuelle Zeit ist die gleiche Zeit, die auf meinem Computer angezeigt wird. Es ist also die richtige Zeit und die Zeiteinstellungen scheinen in Ordnung zu sein. "Current Time" wird von der date () - Funktion in PHP und mit MySQLs NOW () generiert.
Spalte 1 ist der UNIX_TIMESTAMP der MySQL-Abfrage.
Col 2 ist das mit der PHP-Date-Funktion und Col 1 erzeugte Datum.
Spalte 3 ist der Unix-Zeitstempel von strtotime ().
Col 4 ist das Datum, das mit der PHP-Date-Funktion und Col 3 generiert wurde.
Spalte 5 ist das Datum, das mit DATE_FORMAT formatiert wurde (xdate, '% Y-% m-% d').
Spalte 6 ist das Datum direkt aus der Datenbank.
Wie Sie sehen können, werden die ersten acht Zeilen falsch berechnet durch die date () - Funktion (2. Spalte), die mit dem (falschen?) UNIX_TIMESTAMP () der MySQL-Abfrage gespeist wird:
%Vor%Ich habe getestet, was passiert, wenn ich die Zeile ersetzen
%Vor%mit
%Vor%Die date-Funktion gibt das korrekte Datum zurück, ABER das NOW () in MySQL liefert dann die falsche Zeit.
Wenn ich das Teil mit den Einstellungen aus dem Skript entferne (siehe Edit 1), ist alles gleich, aber dann habe ich die falsche Zeitzone.
Hat jemand eine Ahnung für mich?
Ok, meine Einstellungen scheinen in Ordnung zu sein und es scheint so zu sein, dass strtotime () in PHP mit Timezones im Gegensatz zu UNIX_TIMESTAMP in MySQL arbeitet. Ich entschied mich, die SELECTS zu ersetzen, die UNIX_TIMESTAMP () s auswählten und es in einen Timestamp mit strtotime () umwandelten. Jetzt funktioniert es, wie es funktionieren soll.
Ich verstehe nie die Notwendigkeit, ein gültiges vorgelegtes Datum auf die Anzahl der Sekunden seit 1970 neu zu berechnen. Sicherlich werden diese Sekunden später zu einer lesbaren Datumspräsentation umgestaltet.
%Vor%Aber in jedem Fall sollte man die Zeitzoneneinstellungen sowohl des php als auch des Datenbankservers kennen
für die Zeitzone: DateTime, kann einen zweiten Parameter haben, der die Zeitzone angibt
Und wie für die Daten im ersten Post angezeigt: Das Datum 31-3-2017 war das erste Datum nach dem Start der 2017er Tag-Licht-Spar-Zeit (ab Sonntag, 26. März) Auch ein Grund, nicht jeden Tag anzunehmen, hat 24 * 60 * 60 Sekunden