Cách tốt nhất để xử lý các múi giờ khác nhau là gì?


9

Tôi đang làm việc trên một ứng dụng web, nơi sẽ có nhiều người dùng khác nhau từ khắp nơi trên thế giới thực hiện cập nhật. Tôi đang tự hỏi cách tốt nhất để xử lý múi giờ sẽ là gì? Lý tưởng nhất là một sự kiện xảy ra, tất cả người dùng xem nó bằng thời gian địa phương của họ.

Thời gian hệ điều hành máy chủ nên được đặt thành GMT, thời gian vị trí thực hay thời gian vị trí phát triển của tôi?

Nên đặt logic ứng dụng (PHP) và cơ sở dữ liệu (MySQL) để lưu trữ dữ liệu dưới dạng GMT hoặc giờ địa phương (cục bộ cho người dùng)?

Có một tiêu chuẩn ngành hoặc thậm chí là một giải pháp đơn giản / rõ ràng mà tôi không thấy?

Câu trả lời:


4

Lưu các sự kiện của bạn ở định dạng TIMESTAMP của MySQL - nó được lưu trữ nội bộ dưới dạng UTC bất kể múi giờ của máy chủ / người dùng. Bằng cách này, dữ liệu có thể di động bất kể cấu hình cụ thể của máy chủ của bạn. Nếu bạn lưu trữ nó trong bất kỳ múi giờ cụ thể nào, bạn sẽ có nhiều công việc hơn để chuyển đổi nó thành các múi giờ khác nhau.

Tìm nạp nó từ cơ sở dữ liệu vào dấu thời gian số (sử dụng hàm UNIX_TIMESTAMP ()) để sử dụng với các hàm ngày / giờ khác nhau của PHP (chẳng hạn như date ()).

Sau đó, bạn cần đặt cho mỗi người dùng múi giờ PHP bằng date_default_timezone_set () - bạn có thể lấy thông tin đó thông qua cài đặt có thể định cấu hình của người dùng hoặc từ các tiêu đề trình duyệt (kém chính xác hơn). Sau đó, bạn có thể sử dụng các hàm ngày / giờ của PHP như bình thường và đầu ra sẽ ở múi giờ của người dùng.

Một cách khác là hiển thị thời gian tương đối (ví dụ: "5 giờ và 2 phút trước").


5
Hãy nhận biết, rằng (MySQL-) timestampcó một phạm vi giới hạn từ 1970-01-01 00:00:01 UTCđến 2038-01-19 03:14:07 UTC, mà ví dụ không cho phép để ngày cửa hàng sinh (ít nhất là không cho bất cứ ai trên 40 tuổi). Trong thực tế, đây timestamplà giải pháp ít phù hợp nhất để lưu trữ các bản ghi ngày và thời gian. Sử dụng một datetimelĩnh vực và lưu trữ mọi thứ như UTC.
feeela

7

Tôi sẽ sử dụng thời gian UTC trong cơ sở dữ liệu và để khách hàng chuyển đổi thời gian đó thành giờ địa phương của họ khi cần


UTC = GMT. Tôi đã quen với SQL Server
Rachel

9
UTC! = GMT. UTC bù cho thời gian năm tăng lên do vòng quay chậm của Trái đất trong khi GMT thì không. Mặc dù trong thực tế các thuật ngữ được thay thế cho nhau, thật tốt khi biết sự khác biệt. vi.wikipedia.org/wiki/Utc

1
@DeveloperArt: Không nhận ra điều đó, cảm ơn :)
Rachel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.