2009-02-14 29 views
6

Tôi đang làm việc trên trang web cho phép người dùng thêm mục nhập lịch, trên trang chính, tất cả người dùng có thể xem các mục nhập này với một số văn bản cho biết bao lâu cho đến khi các mục nhập đó hiện tại ví dụ:Thời gian địa phương hóa ASP.Net

entry 1: 5 phút
entry 2: 7 giờ
entry 3: 4 ngày

vấn đề tôi đang gặp là mọi người đều có thể là ở các múi giờ khác nhau. Tôi đã quyết định tôi muốn lưu trữ tất cả thời gian/ngày trong GMT.

Điều tôi đang làm xáo trộn là khi người dùng gửi mục nhập lịch cho biết 1/1/2009 10:30 SA, tôi cần phải tìm ra thời gian này là giờ GMT để lưu trữ. Có cách nào để biết múi giờ/múi giờ địa phương của người dùng là gì để tôi có thể so sánh múi giờ với thời gian máy chủ (GMT) để thực hiện chuyển đổi không?

Tôi thực sự hy vọng điều này có ý nghĩa. Tôi hy vọng tôi có thể làm điều này mà không cần phải hỏi người dùng múi giờ họ đang ở trong, hoặc buộc người dùng phải nhập tất cả các thời gian biểu trong GMT.

Trả lời

5

Chuyển đổi datetime sang phía máy khách GMT (trong JavaScript nếu đây là ứng dụng web) trước khi gửi đến máy chủ. Hãy để máy chủ chỉ làm việc với GMT (tôi sẽ nói UTC). Điều tương tự để hiển thị ngày/giờ. Gửi GMT/UTC cho khách hàng và để JS bản địa hóa. Đây là cách duy nhất hoàn toàn an toàn theo ý kiến ​​của tôi, bởi vì bạn để cho nó được lên đến hệ điều hành người dùng để tìm ra những gì thời gian được cho là.

Có nhiều cách tiếp cận khác nhau, và nếu bạn chỉ cần biết thời gian của khách hàng là gì ngay bây giờ bạn có thể nhận được khoản chênh lệch từ nó (có thể được truy xuất thông qua JS vv). Nhưng nếu bạn cần ngày/giờ chính xác tại các địa điểm khác nhau cho ngày/giờ trong tương lai và lịch sử, bạn nên để khách hàng xử lý nó tốt hơn.

PS: Trong triển khai TimeZone của mình, tôi cũng sử dụng định dạng thời gian UNIX để liên lạc giữa máy khách và máy chủ. Điều này chỉ đơn giản là dễ dàng hơn để phân tích cú pháp và tôi tin rằng đó là định dạng ngày giờ nguyên gốc cho JS. Tôi không thể trình bày mã của tôi cho bạn bây giờ, nhưng nên tương đối dễ dàng để google cho việc này.

1

lựa chọn duy nhất của bạn (ngoài người dùng chọn lựa rõ ràng) là để có được những múi giờ bù đắp từ các trình duyệt:

var tzOffset = new Date().getTimezoneOffset(); // Minutes 

Sau đó, bạn cần phải gửi nó đến máy chủ bằng cách sử dụng một lĩnh vực ẩn hoặc tiếp cận phù hợp khác.

Điều này sẽ chỉ cung cấp cho bạn một khoảng thời gian bù trừ, không phải là thông tin múi giờ hoàn chỉnh. Điều này không phải là rất đáng tin cậy, vì vậy tôi vẫn sẽ để lại sự lựa chọn cho người dùng, nhưng sử dụng thông tin này để chọn trước một múi giờ thích hợp.

Các vấn đề liên quan