Zend框架日期时间(时区问题)

时间:2011-06-15 05:20:56

标签: php zend-framework datetime

在Zend Framework项目中,我使用Zend_Date来节省用户输入时间。但是用例是当我从时区插入数据时,应将其转换为来自其他时区的用户。

例如,我从"Asia/Dhaka"时区插入数据,另一位用户应该通过他自己时区的转换来观看

我经历过以前类似的线程,遗憾的是无法完全抓住它。

提前致谢。

2 个答案:

答案 0 :(得分:1)

虽然Zend_Date有一个很好的功能集来处理日期/时间,但它已知比PHP的本机Date对象和函数慢很多。

对于您的问题,根据Zend文档:内部日期始终存储为时间戳和GMT。因此,时区意味着需要减去或增加多少小时才能获得自己时区和地区的实际全球时间。

因此,looking at the api有一些方法可以帮助您在显示时更轻松地计算时区差异,甚至更好,切换日期对象的时区。如果要在数据库中存储日期,则可能更容易存储$date->getUnixTimestamp()返回的时间戳而不是日期对象的输出。或者您还需要原始时区来计算偏移量。

针对您的需求的略微修改的示例,示例#6中的taken from the documentation

date_default_timezone_set('Asia/Dhaka');

// create a date object
$date = new Zend_Date('06.15.2011 00:00:00', Zend_Date::ISO_8601, 'de');

print $date;

$otherdate = clone $date;
$otherdate->setTimezone('America/Montreal');

print $otherdate;

答案 1 :(得分:0)

我写了一个简单的方法来解决这个问题:

public function timeZoneFormat($time)
{
    $currentTimeZone = date_default_timezone_get();
    $timestamp = strtotime($time);
    $customTime= new Zend_Date();
    $customTime->setTimestamp($timestamp);
    $customTime->setTimezone("$currentTimeZone");

    return $customTime;

}