Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ดึงเวลาปัจจุบันแบบ GMT/UTC 0 ด้วย utc_timestamp()

การได้เวลา 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 TIMESTAMP Column แปลง UTC ↔ Session Time Zone อัตโนมัติ
  • DATETIME ไม่แปลง Time Zone (เก็บค่าดิบ) ต้องจัดการเอง