hrevert / ht-time-zone
HtTimeZone 是一个用于简化时区操作的 Zend Framework 2 模块。当您的应用程序用户遍布全球时,此模块非常有用。
dev-master
2014-08-12 09:07 UTC
Requires
- php: >=5.4
- zendframework/zend-modulemanager: ~2.1
- zendframework/zend-mvc: ~2.1
- zendframework/zend-servicemanager: ~2.1
- zendframework/zend-stdlib: ~2.1
- zendframework/zend-view: ~2.1
Requires (Dev)
Suggests
- doctrine/dbal: If you want to use dbal types provided this module
- zendframework/zend-filter: If you want to use the timezone converter(filters) provided this module
This package is auto-updated.
Last update: 2024-09-13 02:58:58 UTC
README
HtTimeZone 是一个用于简化时区操作的 Zend Framework 2 模块。当您的应用程序用户遍布全球时,此模块非常有用。要使用此模块,您需要将所有日期存储在固定时区中(推荐使用 UTC)。
安装
- 将
"hrevert/ht-time-zone": "dev-master",
添加到您的 composer.json 中,并运行php composer.phar update
- 在
config/application.config.php
中启用模块 - 将位于
./vendor/hrevert/ht-time-zone/config/ht-time-zone.global.php
的文件复制到./config/autoload/ht-time-zone.global.php
,并根据您的需要进行更改
文档
Doctrine 类型
如果您使用 doctrine DBAL,则可以使用此模块提供的 DBAL 类型来自动化时区转换。
包含的 DBAL 类型
HtTimeZone\DBAL\Types\UTCDateTimeType
HtTimeZone\DBAL\Types\UTCTimeType
HtTimeZone\DBAL\Types\TimeZoneType
用法
/** * @Entity * @Table(name="myEvent) */ class Event { ... /** * @Column(type="UTCDateTime") * @var DateTime */ protected $datetime; ... }
假设,您想存储用户的时区;
<?php /** * @Entity * @Table(name="user) */ class User { ... /** * @Column(type="TimeZone") * @var DateTimeZone */ protected $timeZone; ... }
假设您想在其他时区(非 UTC)中存储时间,例如 亚洲/加德满都
。
<?php namespace Application\DBAL\Types; use DateTimeZone; class KtmDateTimeType extends AbstractTimeZoneDateTimeType { /** * @var null|DateTimeZone */ static private $dateTimeZone = null; /** * {@inheritDoc} */ protected function getDateTimeZone() { return (self::$dateTimeZone) ? self::$dateTimeZone : (self::$dateTimeZone = new DateTimeZone('Asia/Kathmandu')); } }
return [ 'doctrine' => [ 'configuration' => [ 'orm_default' => [ 'types' => [ 'ktmdatetime' => 'Application\DBAL\Types\KtmDateTimeType', ], ] ], ], ];
过滤器
此模块包含一些与时区相关的过滤器。如果您不了解过滤器,请先阅读 这里。
包含的过滤器
- HtTimeZone\Filter\TimeZoneConverter
ClientToServerTimeZone
ServerToClientTimeZone
用法
HtTimeZone\Filter\TimeZoneConverter
此过滤器非常简单。
$filter = new HtTimeZone\Filter\TimeZoneConverter($fromTimeZone, $toTimeZone); echo $filter->filter(new DateTime());
要了解此过滤器的工作原理,最好的方式是查看代码 此处。
HtTimeZone\Filter\ServerToClientTimeZone
$filter = $this->getServiceLocator()->get('FilterManager')->get('ServerToClientTimeZone'); echo $filter->filter(new DateTime());
HtTimeZone\Filter\ClientToServerTimeZone
$filter = $this->getServiceLocator()->get('FilterManager')->get('ClientToServerTimeZone'); echo $filter->filter(new DateTime());
使用视图助手
此模块包含两个视图助手,使我们的工作更加轻松。
- htTimeZone
- htTimeInterval
基本用法
htTimeZone
此视图助手将 DateTime 实例的时区设置为客户端的时区。就是这样!此视图助手用于在客户端的时区中显示日期!
$dateTime = new DateTime(); echo $this->htTimeZone($dateTime)->format('d/m/Y H:i');// will print according to user`s timezone
htTimeInterval
此视图助手用于显示类似 5 分钟前
的内容。
echo $this->htTimeInterval(new DateTime()); // will print `Just Now` echo $this->htTimeInterval(time() - 10); // will print `10 seconds ago`
填充策略
HtTimeZone\Stdlib\Hydrator\Strategy\TimeZoneConverter
HtTimeZone\Stdlib\Hydrator\Strategy\TimeZoneStringStrategy
正在进行中
这是一个正在进行中的项目。使用时请自行承担风险!