2010-08-16 81 views
1

從PHP5.3起(我認爲)它成爲date.timezone要求在php.ini文件中設置,或在運行時通過date_default_timezone_set()函數設置的要求。如果不設置這個值,你得到的,錯誤的東西一起的臺詞:在PHP中猜測用戶的時區

PHP警告date():是不是安全的依靠系統的時區設置。您需要需要才能使用date.timezone設置或date_default_timezone_set()函數。如果您使用這些方法中的任何一種,並且仍然收到此警告,則很可能是拼寫錯誤的時區標識符。我們選擇 '美國/紐約' 爲 '-4.0/DST' 相反在FILE上線LINE

我想知道它使用什麼樣的機制來猜測時區,因爲它似乎是相當準確的,我想知道我自己,所以我可以在一個更友好的方式來呈現這個錯誤給用戶,或允許他們接受這個作爲正確的時區。

+0

我知道這是不很明顯,但**我不是**這樣做的網頁開發。我在這個實例中的一個客戶端桌面上運行的應用程序中使用PHP。 – 2010-08-16 23:07:47

回答

4

我可能會使用的date_default_timezone_get()功能:

string date_default_timezone_get (void ) 

按優先順序排列,這種功能 通過返回默認時區:

  • 閱讀使用date_default_timezone_set(時區設置) 函數(如果有的話)
  • 讀取TZ環境變量(如果非空)(在PHP之前 5.3.0)
  • 讀date.timezone INI選項的查詢的主機操作系統(的值(如果設置)
  • 如果支持的話,並通過 所述OS)

http://www.php.net/manual/en/function.date-default-timezone-get.php

允許
+0

我覺得自己就像這樣一個傻瓜。 – 2010-08-16 23:17:43

+2

沒關係。每個人都有腦屁,看看我的問題清單! ;) – 2010-08-16 23:24:07

8

邁克的方法只會讓你的網絡服務器的時區。 我相信你正試圖獲得用戶的時區。 我用jQuery和PHP寫了一個函數。這已經過測試,並且確實有效!

在PHP頁面,你想擁有的時區作爲一個變量,有此代碼段靠近頁面頂部的地方:

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

這將讀取會話變量「時間」,我們現在即將創建。

在同一頁上,在,你需要首先包括jQuery的:

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

另外在,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> 

您可能會或可能沒有注意到,但你需要將網址更改爲你的實際域名。

最後一件事。你可能想知道timezone.php是什麼。嗯,這很簡單: (創建一個名爲timezone.php並指向它與上面的網址一個新的文件)

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

如果這個工作正常,它會首先加載頁面,執行JavaScript並重新加載頁面。然後您將能夠讀取$ timezone變量並將其用於您的樂趣!它返回當前的UTC/GMT時區偏移量(北京時間)或任何時區你英寸

乾杯

</Westy92>

+0

這很酷。我不是在尋找客戶端的時區,但我會在我的另一個項目中使用這個代碼。非常好的工作。 – 2011-04-10 05:08:50

+0

這將返回用戶當前的時區*偏移量*。如果你想猜測用戶當前的*時區*,那麼你必須做更詳細的事情,如[jsTimeZoneDetect](http://pellepim.bitbucket.org/jstz/)。 – 2013-09-09 13:50:12