Tôi thường cần hiển thị thông tin dựa trên hoặc chịu ảnh hưởng của thời gian địa phương thực tế khác nhau theo múi giờ. Có cách nào đáng tin cậy để nhận thời gian và/hoặc múi giờ hiện tại của người dùng không?Tự động phát hiện thời gian cục bộ hiện tại của người dùng bằng JavaScript hoặc PHP
Những vấn đề chính:
- server-side code được dựa trên các máy chủ trang web hoặc ISP của người dùng
- client-side code được dựa trên đồng hồ hệ thống của người dùng mà là quá dễ dàng thao tác
Các câu hỏi chính:
- Có cần phải xác định vị trí địa lý của người dùng không?
- Thời gian ISP có thể là hướng dẫn chính xác không?
- Người dùng có thể thay đổi hoặc sửa đổi đồng hồ hệ điều hành?
Ví dụ:
Đếm ngược:
Chỉ 1 giờ, 3 phút, 56 giây để đi!
Vấn đề: giây để dựa trên nội dung; Đồng hồ hệ điều hành của người dùng, thời gian máy chủ lưu trữ (cộng hoặc trừ bù trừ), thời gian hệ thống ISP. Đây là dễ dàng nếu đồng hồ kết thúc tại cùng một thời gian cho tất cả các múi giờ, nhưng phức tạp hơn nếu đó là một đếm ngược đến một cái gì đó giống như nửa đêm theo múi giờ địa phương của người dùng)
Sửa log
mục niêm yết tại 3 : 03pm (10 giây trước)
Vấn đề: "10 giây" được tính bất kể người dùng, thời gian được điều chỉnh để khớp với múi giờ của người dùng.
lần mở cửa:
nhà hàng này mở cửa nay đến nửa đêm (AEST).
Issue: Đưa ra một thời gian như nửa đêm có thể được tính bằng cách bù đắp từ các server-side nhưng sử dụng lần psudo như bây giờ, trong 2 giờ là dựa trên thời gian của người dùng.
PHP: sử dụng time()
xuất hiện thời gian máy chủ. Điều này có thể được bù đắp tùy thuộc vào múi giờ của người dùng.
JavaScript: sử dụng Date()
xuất ra thời gian đồng hồ máy tính của người dùng quá dễ thao tác.
Nếu người dùng thao tác trên đồng hồ máy tính, bạn không thể làm gì với nó. Tại sao bạn lo lắng về việc liệu đồng hồ người dùng có chính xác hay không? – Simurr
Thời gian ISP không bao giờ xâm nhập vào nó. Hoặc là máy chủ tính toán thời gian và gửi nó cho máy khách hoặc máy chủ gửi một số JavaScript được diễn giải trên máy khách và tính toán thời gian. Bạn không thể biết thời gian đồng hồ hệ thống trên tất cả các bước nhảy ở giữa. –
Nếu đồng hồ người dùng không chính xác thì JavaScript không phải là phương pháp đáng tin cậy. Nếu thời gian cần phải cụ thể, việc sử dụng có thể thao tác các kết quả, bỏ qua hoặc quay lại vv. –