Giá trị ngày / giờ / ngày giờ được lưu trữ trong MySQL khi bạn cung cấp chúng. I E. nếu bạn INSERT
chuỗi 2012-04-17 12:03:23
vào DATETIME
, đó là giá trị sẽ được lưu trữ. Nó sẽ được chuyển đổi nội bộ thành một dấu thời gian có thể chính xác hoặc không chính xác (xem bên dưới), nhưng khi bạn truy vấn lại giá trị, bạn sẽ nhận lại được cùng một giá trị; khứ hồi là minh bạch.
Sự cố có thể xảy ra nếu bạn cố gắng thực hiện các phép tính thời gian bên trong SQL. I E. bất kỳ hoạt động nào yêu cầu SQL phải tính đến múi giờ và / hoặc thời gian của máy chủ. Ví dụ:sử dụng NOW()
. Đối với bất kỳ hoạt động nào trong số đó, múi giờ và / hoặc thời gian máy chủ nên được đặt chính xác. Xem Sự cố về múi giờ
.
Nếu điều đó không liên quan đến bạn và bạn chỉ cần thực hiện các phép tính bằng PHP, bạn chỉ cần đảm bảo rằng bạn biết bạn muốn chuyển đổi từ múi giờ nào sang múi giờ nào. Vì mục đích đó, nó có thể thuận tiện để chuẩn hóa mọi lúc thành UTC, nhưng không cần thiết, vì chuyển đổi múi giờ từ bất kỳ múi giờ nào sang bất kỳ múi giờ nào khác cũng hoạt động, miễn là bạn rõ ràng về múi giờ bạn đang chuyển đổi từ và sang.
date_default_timezone_set('Asia/Tokyo'); // your reference timezone here
$date = date('Y-m-d H:i:s');
/* INSERT $date INTO database */;
$date = /* SELECT date FROM database */;
$usersTimezone = new DateTimeZone('America/Vancouver');
$l10nDate = new DateTime($date);
$l10nDate->setTimeZone($usersTimezone);
echo $l10nDate->format('Y-m-d H:i:s');