2010-05-08 26 views
3

我使用Zend_Date在日程安排應用程序中管理日期/時間。我如何簡單地用Zend_Date更改時區偏移?

我能夠確定用戶的時區的唯一方法是通過JavaScript,它只給出時區偏移量。 Zend_Date似乎只採用'America/New_York'格式的時區。

有沒有辦法以這種格式獲取用戶時區或用Zend_Date設置時區偏移?

謝謝!

回答

2

尼基索引的數組,

你並不真的需要Zend_Date的運算此作爲PHP內在DateTime和DateTimeZone對象很好的工作這一點;不過,如果你真的需要使用Zend_Date,我可以指出你正確的方向。

參見下面的實施例

  1. $日期=新Zend_Date的運算(1234567890,假,$區域);
  2. $日期 - > ...的toString(參見:http://framework.zend.com/manual/en/zend.date.constants.html瞭解詳細信息)
  3. 使用下列常量的ISO 8601: (Z =時區的差異[+0100])

這應該讓你到你需要的地方。如果您遇到問題,請發佈代碼示例。

+0

順便說一句,更好的做法是允許用戶從您存儲的列表中選擇他們的時區。如果你想讓用戶更容易,你可以首先提供一個猜測列表。 以下內容可能對此有所幫助: 靜態方法「DateTimeZone :: listAbbreviations()」將返回時區縮寫列表,其中還包括偏移量(與UTC/GMT的偏移量)。使用你的Javascript結果來搜索這個數組可能的時區。可能會有模仿,因此向用戶呈現模仿並讓他們選擇。 – 2010-05-15 05:53:02

0

您可以使用JavaScript將cookie設置爲用戶時區偏移量。

然後在PHP中,你可以通過有偏移

$timezones = array (

    '-1' => 'adfas/adsfafsd', 
    '-2' => 'adsfasdf/asdfasdf' 
    ... 
); 

$date->setTimezone($timezones[$_COOKIE['tz_offset']]); 
0

您可以使用timezone_name_from_abbr功能:

$javascript_offset = '-1'; 
$zone = timezone_name_from_abbr('', $javascript_offset * 3600, 0); 

您還需要考慮DST。有關更多信息,請參閱this example