Der Trick dabei ist zu wissen, welcher Spaltentyp date_last_active
ist ist. Ich habe genug Erfahrung mit TIMESTAMP
und DATETIME
um zu wissen, dass die eine die MySQL-Sitzungsvariable time_zone übersetzt (und berücksichtigt), die andere nicht.
mysql> SET SESSION time_zone = 'America/New_York';
Query OK, 0 rows affected (0.00 sec)
mysql> create table timetest ( dt datetime NULL, ts timestamp NOT NULL DEFAULT 0 );
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO timetest ( dt, ts ) VALUES ( UTC_TIMESTAMP(), UTC_TIMESTAMP() );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO timetest ( dt, ts ) VALUES ( NOW(), NOW() );
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM timetest;
+---------------------+---------------------+
| dt | ts |
+---------------------+---------------------+
| 2009-06-27 17:53:51 | 2009-06-27 17:53:51 |
| 2009-06-27 13:53:54 | 2009-06-27 13:53:54 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> set session time_zone='UTC';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM timetest;
+---------------------+---------------------+
| dt | ts |
+---------------------+---------------------+
| 2009-06-27 17:53:51 | 2009-06-27 21:53:51 |
| 2009-06-27 13:53:54 | 2009-06-27 17:53:54 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
Also, hier ist, was ich mache:
- Verwenden Sie beim Einfügen in die Datenbank UTC in PHP und in MySQL. In
my.cnf
Ich habe:time_zone=UTC
um Probleme in MySQL zu vermeiden, und in PHP Idate_default_timezone_set('UTC')
. - Verwenden Sie
UTC_TIMESTAMP()
stattNOW()
- eine ist UTC, eine verwendet die lokale (Sitzungs-) Zeitzone. Wenn Sie dem ersten Punkt oben folgen, verwenden Sie UTC_TIMESTAMP(). - Wenn Sie sich für die Anzeige für den Benutzer entscheiden,
set time_zone='
local_time_zone'
bevor etwas angezeigt wird. - Wenn Sie Sachen anzeigen müssen, dann aktualisieren Sie, achten Sie darauf, Ihre Aufrufe mit den entsprechenden Zeitzonenänderungen in PHP und MySQL einzuklammern.
Hoffentlich reicht das aus, um herauszufinden, wie man das angeht. Lassen Sie mich wissen, wenn Sie weitere Fragen haben.