Tôi đang phát triển một trang web nơi tôi phải xử lý các múi giờ có thể khác nhau từ người dùng. Điều này trở thành một vấn đề lớn vì trang web lưu trữ các sự kiện thời gian tinh tế như đấu giá.Làm thế nào để đối phó với múi giờ giữa máy chủ và máy khách?
Tất cả ngày/giờ trên máy chủ đều ở dạng UTC. Cơ sở dữ liệu lưu trữ mọi thứ trong dấu thời gian UTC. Múi giờ mặc định của PHP cũng được đặt thành UTC (date_default_timezone_set('UTC');
).
Bây giờ, sự cố của tôi là cách tôi nên tương tác với người dùng, cho dù tôi chỉ hiển thị ngày hay quan trọng hơn, tôi đang đọc ngày/giờ từ đầu vào của người dùng.
Một ví dụ cụ thể:
- Cuộc đấu giá có thời hạn, mà tôi lưu trữ trong cơ sở dữ liệu như UTC.
- Khi tôi xem phiên đấu giá trên trang web, bộ hẹn giờ javascript sử dụng đối tượng
Date
để tính thời gian còn lại. Nó tự động chuyển đổi múi giờ thành GMT + 0100 (múi giờ địa phương của tôi). Vì vậy, nếu thời hạn là'2013-08-08 10:46:08'
(UTC), đối tượng ngày javascript sẽ trả vềAug 08 2013 11:26:15 GMT+0100 (GMT Standard Time)
. - Nếu thời gian hiện tại lớn hơn 11:46:08 thì bộ hẹn giờ cho biết thời gian còn lại là 00:00 (chính xác).
Nhưng nếu tôi cố gắng để chèn một nỗ lực, máy chủ chấp nhận kể từ khi tình trạng trên
MySQL INSERT
đánh giá đểtrue
:INSERT INTO Hồ sơ dự thầu ... WHERE ... VÀ auction_deadline> NOW() ...
(vì auction_deadline = '2013-08-08 10:46:08'
và VỚI DOANH NGHIỆP() = '2013-08-08 10:26:50'
)
Tất cả điều này mumbo jumbo của múi giờ tan não của tôi. Tôi đang thiếu gì ở đây? Tôi gần như chắc chắn rằng việc lưu trữ tất cả các ngày/giờ trong UTC bên trong cơ sở dữ liệu là tốt nhất. Tôi chỉ không thể nghĩ rằng tinh thể rõ ràng như thế nào để đối phó với nó giữa người sử dụng và cơ sở dữ liệu.
Nếu bạn cần một số mã để làm rõ câu hỏi của tôi, vui lòng nói. –