2011-08-18 76 views
0

我有這個腳本,它將1-24軍事時間的數組轉換成AM/PM,供用戶查看。我希望這個腳本不僅可以顯示小時和上午/下午,而且可以顯示當地用戶的時間。可以做到嗎?向用戶顯示當地時間? PHP

這裏是我的腳本,我使用顯示小時:

foreach($timelist as $time): 
     echo "<input type='radio' name='time' value='$time' />"; 
     //echo $time; 
     $hr = ($time <= 12 ? $time : ($time - 12)); 
     $ampm = ((($time >= 12) and ($time < 24)) ? 'PM' : 'AM'); 
     echo $hr." ".$ampm; 
     echo "<br />"; 
endforeach; 

我想$小時顯示例如12 GMT作爲當前用戶的本地時間。因此,如果他們在PST中,則由於用戶的位置,它將是5 PST而不是12 GMT。根據位置不要忘記AM/PM切換。

任何幫助表示讚賞。

謝謝。

+1

如何獲得用戶當前的時區/ DST設置? –

+0

您需要讓用戶告訴您他的時區,或者使用GeoIP查找來猜測,這會增加延遲。如果您沒有註冊/配置文件,最好的辦法是選擇一個時區(例如美國東部時區),並說出您在下一個時間使用的時區。 –

+0

有沒有辦法查找瀏覽器時區? –

回答

1

客戶端不會在請求頭中發送時區或本地時間,所以如果沒有外部幫助,您無法單獨在PHP中執行此操作。有一對夫婦的方式去了解這一點:

  1. 獲取有關客戶端的JavaScript本地時間,而「優雅降級」到服務器時,如果用戶已禁用JavaScript。如果這隻需要顯示給用戶,這是最簡單的選擇。如果你需要在服務器端做些什麼,你可以提交一個AJAX請求的時區/時間。
  2. 使用地理定位API /軟件包根據IP地址猜測用戶的時區。這在時間和精度上「更加昂貴」,但純粹是服務器端。使用它來計算相對於服務器時間的GMT +/-偏移量。然後,您可以要求用戶在登錄時確認計算的是否正確。
1

在用戶登錄頁面上,使用javascript更改包含用戶的UTC偏移量的表單操作(或者創建隱藏字段)。偏移量可以使用getTimezoneOffset

然後,您可以將此偏移量存儲在用戶的會話和/或表中,並使用它來計算PHP中的本地時間。