2011-01-20 39 views

Trả lời

48

Điều này sẽ giúp bạn có được múi giờ như là một biến PHP. Tôi đã viết một hàm bằng cách sử dụng jQuery và PHP. Đây là thử nghiệm, và không hoạt động!

Trên trang PHP nơi bạn đang muốn có múi giờ như là một biến, có đoạn mã này ở đâu đó gần phía trên of the page:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

này sẽ đọc các biến session "thời gian", mà chúng ta sắp tạo ra.

Trên cùng một trang, trong phần <head>, trước hết bạn cần phải bao gồm jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

Cũng trong phần <head> ,, dán này jQuery:

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

Bạn có thể hoặc có thể không nhận thấy, nhưng bạn cần thay đổi url thành tên miền thực của bạn.

Một điều cuối cùng. Có lẽ bạn đang tự hỏi timezone.php là gì. Vâng, nó chỉ đơn giản là thế này: (tạo một file mới có tên gọi timezone.php và trỏ đến nó với các url trên)

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

Nếu đây làm việc một cách chính xác, nó sẽ lần đầu tiên tải trang, thực hiện các hoạt Javascript và tải lại trang. Sau đó, bạn sẽ có thể đọc biến múi giờ $ và sử dụng biến đó cho niềm vui của bạn! Nó trả về bù trừ múi giờ UTC/GMT hiện tại (GMT -7) hoặc bất kỳ múi giờ nào bạn đang ở.

Bạn có thể đọc thêm về điều này trên blog

tôi Cheers

</Westy92>

+0

tôi gần như đã từ bỏ điều này! cảm ơn ! – andrei

+1

tôi gặp lỗi khi nói múi giờ $ không được xác định. tại sao? – arboles

+6

Tôi nghĩ rằng giải pháp này về cơ bản là sai (ít nhất là trong một số trường hợp), bởi vì nó cho phép người dùng thay đổi thời gian, bất cứ điều gì anh ta muốn, đơn giản chỉ cần gọi http://domain.com/timezone.php –

9

Cũng như Oded đã trả lời. Bạn cần phải có loại chức năng phát hiện này trong javascript.

Tôi đã đấu tranh với chính bản thân mình và nhận ra rằng chênh lệch không đủ. Nó không cung cấp cho bạn bất kỳ thông tin về tiết kiệm ánh sáng ban ngày cho ví dụ. Tôi đã kết thúc viết một số mã để ánh xạ tới các khóa cơ sở dữ liệu zoneinfo.

Bằng cách kiểm tra vài ngày trong một năm, bạn có thể xác định chính xác múi giờ hơn.

Hãy thử kịch bản ở đây: http://jsfiddle.net/pellepim/CsNcf/

Đơn giản chỉ cần thay đổi múi giờ hệ thống của bạn và bấm chạy để kiểm tra nó. Nếu bạn đang chạy chrome, bạn cần phải làm mỗi bài kiểm tra trong một tab mới mặc dù (và safar cần phải được khởi động lại để nhận các thay đổi múi giờ).

Nếu bạn muốn biết thêm thông tin chi tiết của mã kiểm tra: https://bitbucket.org/pellepim/jstimezonedetect/

+0

Đây có lẽ là cách tiếp cận hợp lý nhất. –

27

Mở server-side nó sẽ không chính xác như với JavaScript. Trong khi đó, đôi khi nó là cần thiết để giải quyết nhiệm vụ đó. Chỉ để chia sẻ giải pháp khả dĩ trong trường hợp này tôi viết câu trả lời này.

Nếu bạn cần xác định múi giờ của người dùng, nó có thể được thực hiện thông qua dịch vụ Geo-IP. Một số người trong số họ cung cấp múi giờ. Ví dụ: số này (http://smart-ip.net/geoip-api) có thể giúp:

<?php 
$ip  = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json = file_get_contents('http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP 
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) 
$ipData = json_decode($json, true); 

if ($ipData['timezone']) { 
    $tz = new DateTimeZone($ipData['timezone']); 
    $now = new DateTime('now', $tz); // DateTime object corellated to user's timezone 
} else { 
    // we can't determine a timezone - do something else... 
} 
+1

http://smart-ip.net/ hiện không thể truy cập được. Vì vậy, giải pháp này là mơ hồ. Tôi nghĩ rằng họ tắt máy chủ của họ. Vì vậy, sử dụng mã này có nguy cơ của riêng bạn bởi vì kết quả trả về bởi điều này là null. –

+2

(-1) http://smart-ip.net/geoip-json/202.191.214.178 - Dịch vụ tạm thời không có sẵn – Chinmay235

+3

Bạn có thể thử trang này ngay bây giờ: http://ip-api.com/json/. –

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