การได้เวลา UTC (GMT+0) โดยตรงด้วย utc_timestamp()
ฟังก์ชัน UTC_TIMESTAMP() คืนค่า DateTime ปัจจุบันใน Time Zone UTC (GMT+0) โดยตรง ไม่ต้องแปลงจาก NOW() ซึ่งเป็นเวลาของ Server Time Zone
ตัวอย่างการใช้งาน
ดูเวลา Server (NOW):
mysql> SELECT NOW();
+---------------------+
| now() |
+---------------------+
| 2019-04-11 17:50:05 |
+---------------------+
1 row in set (0.00 sec)
ดูเวลา UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| utc_timestamp() |
+---------------------+
| 2019-04-11 12:20:08 |
+---------------------+
1 row in set (0.00 sec)
ผลต่าง 5 ชั่วโมง 30 นาที (Server อยู่ Time Zone UTC+5:30)
ฟังก์ชัน UTC ที่เกี่ยวข้อง
| Function | คืนค่า | ตัวอย่าง |
|---|---|---|
| UTC_TIMESTAMP() | DATETIME (YYYY-MM-DD HH:MM:SS) | 2019-04-11 12:20:08 |
| UTC_DATE() | DATE (YYYY-MM-DD) | 2019-04-11 |
| UTC_TIME() | TIME (HH:MM:SS) | 12:20:08 |
การแปลง Time Zone แบบ Manual (ถ้าต้องการ Time Zone อื่น)
-- แปลงจาก Server Time Zone ไป UTC
SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+00:00');
-- แปลงจาก UTC ไป Time Zone อื่น (เช่น ICT UTC+7)
SELECT CONVERT_TZ(UTC_TIMESTAMP(), '+00:00', '+07:00');
-- ต้องโหลด Time Zone Tables ก่อน
-- mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Best Practice
- เก็บเวลาใน Database เป็น UTC เสมอ (ใช้ UTC_TIMESTAMP() หรือ TIMESTAMP Column)
- แปลง Time Zone แค่ตอนแสดงผล (Application Layer)
- MySQL
TIMESTAMPColumn แปลง UTC ↔ Session Time Zone อัตโนมัติ DATETIMEไม่แปลง Time Zone (เก็บค่าดิบ) ต้องจัดการเอง