verschiedene Zeitstempel bei Verwendung von strtotime () in PHP und UNIX_TIMESTAMP () in MySQL

8

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)

aus

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?

    
Bernhard 13.06.2017, 17:39
quelle

3 Antworten

5

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.

    
Bernhard 16.06.2017, 12:24
quelle
2

Erweitern Sie Ihr Format um Stunden und Minuten, 1 bekommt 10, dass Sie LOCAL Server Datum (entsprechend seiner Zeitzone) mit UNIXTIME vergleichen, welches GMT ist und dass Sie sich in einer Zeitzone östlich von Greenwich befinden.

    
tony gil 16.06.2017 12:30
quelle
1

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

    
Ivo P 22.06.2017 15:21
quelle

Tags und Links