【问题标题】:How can I simply change the Timezone Offset with Zend_Date?如何使用 Zend_Date 简单地更改时区偏移量?
【发布时间】:2023-03-03 03:03:01
【问题描述】:

我正在使用 Zend_Date 来管理日程安排应用程序中的日期/时间。

我能够确定用户的时区的唯一方法是通过 Javascript,它只提供时区偏移量。 Zend_Date 似乎只采用 'America/New_York' 格式的时区。

有没有办法以这种格式获取用户时区或使用 Zend_Date 设置时区偏移量?

谢谢!

【问题讨论】:

    标签: php javascript zend-framework timezone zend-date


    【解决方案1】:

    尼基,

    您实际上并不需要 Zend_Date,因为 PHP 固有的 DateTime 和 DateTimeZone 对象对此很有效;但是,如果您确实需要使用 Zend_Date,我可以为您指明正确的方向。

    看下面的例子

    1. $date = new Zend_Date(1234567890, false, $locale);
    2. $date->toString...(有关详细信息,请参阅:http://framework.zend.com/manual/en/zend.date.constants.html
    3. 对 ISO 8601 使用以下常量: (Z = 时区差异 [+0100])

    这应该可以让你到达你需要去的地方。如果遇到困难,请发布代码示例。

    【讨论】:

    • 顺便说一句,更好的做法是允许用户从您存储的列表中选择他们的时区。如果你想让用户更容易,你可以先给出一个猜测列表。以下内容可能对此有所帮助:静态方法“DateTimeZone::listAbbreviations()”将返回时区缩写列表,其中还包括偏移量(与 UTC/GMT 的偏移量)。使用来自 Javascript 的结果在此数组中搜索可能的时区。可能会有骗子,所以将骗子呈现给用户并让他们选择。
    【解决方案2】:

    您可以使用 timezone_name_from_abbr 函数:

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

    您还需要考虑夏令时。请查看this example 了解更多信息。

    【讨论】:

      【解决方案3】:

      您可以使用 javascript 将 cookie 设置为用户时区偏移量。

      然后在php中你可以有一个由偏移量索引的数组

      $timezones = array (
      
          '-1' => 'adfas/adsfafsd',
          '-2' => 'adsfasdf/asdfasdf'
          ...
      );
      
      $date->setTimezone( $timezones[$_COOKIE['tz_offset']] );
      

      【讨论】:

        猜你喜欢
        • 2014-12-28
        • 1970-01-01
        • 2014-12-10
        • 2022-01-12
        • 2011-09-23
        • 2012-10-23
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多