2013-04-01 252 views
1

根據this calculator此日期應爲Mon Apr 01 2013 13:11:57 GMT + 0200。但相反,它是服務器時間:2013-04-01 07:11:57。我得到這是一個時區問題(服務器在-4),但是有沒有辦法使這個時區獨立或我必須從數據庫中查詢用戶的時區?將秒轉換爲日期

$date = 1364814717; 
$date = date('Y-m-d H:i:s', $date); 
+0

是的,你需要詢問用戶的時區或檢查IP地址,並通過地址結構對其進行地理定位。 PHP不能以任何其他方式知道訪問者的時區,即使這樣,它也是基於位置的,這可能並不總是您的位置(考慮代理)。你也看到現在所有的人都給出了錯誤的答案,因爲你的標題提示了別的問題,而不是你的實際問題狀態;) – 2013-04-01 11:35:56

+0

http://stackoverflow.com/questions/2505681/timezone-conversion-in-php檢查這個線程 – Svetoslav

+0

如果您需要UTC/GMT格式的輸出,請使用'gmdate()'。請注意,推薦的計算器格林尼治標準時間+2。 – mario

回答

0

您可以更改默認的時區是這樣的:

date_default_timezone_set('UTC'); 

如果你需要每個用戶的這種不同,你總是可以發送未轉化的數量和使用JavaScript(見使用getTimezoneOffset)但它可能更好地讓用戶選擇(他們的電腦可能不知道它真的在哪裏!)

+0

我仍然需要用戶的時區。我想我無法避免查詢用戶的時區。 – erdomester

+0

@erdomester如果javascript是您的選項,請參閱更新的答案。你也可以嘗試從IP服務器端弄清楚,但是這經常會出錯(使用代理服務器進行啓動) – Dave

+0

不,這是可以的我在其他文件中使用查詢,謝謝你的回答。 – erdomester

0

我希望這是你在找什麼。

var myDate = new Date(); 
    document.write(myDate.getTimezoneOffset()); 
0

您需要詢問用戶的位置並將其存儲在數據庫的配置文件中。你實際上不能依賴任何東西。由於用戶可以支持代理,並且似乎與上海一樣,但實際上在墨爾本。

例如用戶說它在GMT +1。您將選項列表放入用戶的配置文件中,並在用戶保存時將其寫入到名爲(例如)timezone的數據庫行中。

嘗試使用新的DateTime樣式(來自ID爲7的用戶的示例);

PHP

$mysqli = new mysqli("localhost", "my_user", "my_password", "database_name"); 

if ($result = $mysqli->query("SELECT timezone FROM users where user_id = 7")) { 
    $prefix = ''; 

    if ($result[0]->timezone >= 0) { 
     $prefix = '+'; 
    } 

    $date = new DateTime('NOW GMT'.$prefix.$result[0]->timezone); 

    echo '<pre>'; 
    print_r($date); 
    echo '</pre>'; 
} 
else { 
    echo 'Query failed'; 
} 

這裏會發生什麼事是你只保存GMT偏移量(或任何你想要的timeset使用),並返回基於用戶偏好的當前時間。

輸出

DateTime Object (
    [date] => 2013-04-01 13:50:08 
    [timezone_type] => 1 
    [timezone] => +01:00 
) 

不要忘記尋找到夏季;)

祝你好運!

+0

哇。偉大的方法!我很少在網站配置文件中看到這一點,但今天我在Drupal上註冊並要求提供我的時區。到目前爲止,我依賴於用戶的時區(getTimezoneOffset())。 – erdomester