ここでの秘訣は、date_last_active
の列タイプを知ることです。 は。 TIMESTAMP
については十分な経験があります およびDATETIME
一方がMySQLのtime_zoneセッション変数を変換(および尊重)することを知るために、もう一方は変換しません。
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)
だから、これが私がすることです:
- データベースに挿入するときは、PHPおよびMySQLでUTCを使用してください。
my.cnf
内 私は持っています:time_zone=UTC
MySQLおよびPHPでの問題を回避するために、date_default_timezone_set('UTC')
。 -
UTC_TIMESTAMP()
を使用しますNOW()
の代わりに -1つはUTCで、もう1つはローカル(セッション)タイムゾーンを使用します。上記の最初のポイントに従っている場合は、UTC_TIMESTAMP()を使用してください。 - ユーザーに表示することを選択する場合、
set time_zone='
local_time_zone'
何かを表示する前に。 - 表示する必要がある場合は、更新し、PHPとMySQLでの適切なタイムゾーンの変更で呼び出しを囲んでください。
うまくいけば、これにアプローチする方法を理解するのに十分です。ご不明な点がございましたら、お気軽にお問い合わせください。