Múi giờ khó có thể chọn từ hàng chục các tùy chọn. Tôi muốn làm cho quá trình này đơn giản hơn. Tôi thấy một số hình thức trong tự nhiên mà có thể làm đoán tốt nhất. Tôi Goggled cho một giải pháp nhưng với ra bất kỳ may mắn. Có ai có ý tưởng làm thế nào để làm điều đó?Cách phát hiện múi giờ của người dùng trong biểu mẫu đăng ký?
Trả lời
Javascript:
var today = new Date();
alert(today.getTimezoneOffset());
này sẽ cung cấp cho các offset (GMT-X), nhưng không phải là tên múi giờ thực tế. Hãy nhớ rằng bù giờ GMT có thể tương ứng với nhiều múi giờ và cũng phải tính đến tiết kiệm ánh sáng ban ngày. Tuy nhiên, đây có lẽ là nơi dễ nhất để bắt đầu, ngắn cho phép người dùng chọn múi giờ của họ từ menu thả xuống.
Bạn có thể sử dụng JavaScript đến hơn hoặc ít đáng tin cậy xác định múi giờ bù đắp. HTTP, với kiến thức của tôi, không cung cấp bất kỳ phương tiện nào để xác định múi giờ của khách hàng trên máy chủ.
Sử dụng Javascript:
<input type="hidden" id="visitorTZ" name="visitorTZ" />
<script type="text/javascript">
d = new Date();
document.getElementById('visitorTZ').value = d.getTimezoneOffset()/60;
</script>
Bạn có thể thử để phát hiện một quốc gia sử dụng bằng cách kết hợp địa chỉ IP của họ cho một loạt các danh sách. Có nhiều cách khác nhau để đạt được điều này, nhưng tốt nhất là sử dụng this API.
Một ví dụ về việc sử dụng sẽ là: http://nl.ae/iptocapi.php?type=1&ip=00.00.00.00. Điều này sẽ trả về mã quốc gia của địa chỉ IP đó. Sau đó, nó khá dễ dàng để phù hợp với mã quốc gia với múi giờ.
Khi bạn đã tìm thấy múi giờ theo cách này, bạn có thể sử dụng múi giờ làm giá trị mặc định trong hộp thả xuống.
Tôi đã tìm thấy giải pháp tốt hơn và mạnh mẽ hơn tại đây: http://www.onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/.
Như tác giả giải thích, Date.getTimezoneOffset()
là không phù hợp.
Điều duy nhất tôi muốn lưu ý là 'getTimezoneOffset()' dường như trả về khoảng thời gian GMT là chênh lệch múi giờ của người dùng được bù trừ, và không phải là cách khác xung quanh. tức là khi ở Giờ Chuẩn Đông Bắc Mỹ, '(Ngày mới()). GetTimezoneOffset()/60' trả về' 5', khi EST thực sự bằng GMT-05: 00, không phải GMT + 05: 00. – gabriel