hrevert/ht-time-zone

HtTimeZone 是一个用于简化时区操作的 Zend Framework 2 模块。当您的应用程序用户遍布全球时,此模块非常有用。

dev-master 2014-08-12 09:07 UTC

This package is auto-updated.

Last update: 2024-09-13 02:58:58 UTC


README

HtTimeZone 是一个用于简化时区操作的 Zend Framework 2 模块。当您的应用程序用户遍布全球时,此模块非常有用。要使用此模块,您需要将所有日期存储在固定时区中(推荐使用 UTC)。

安装

  1. "hrevert/ht-time-zone": "dev-master", 添加到您的 composer.json 中,并运行 php composer.phar update
  2. config/application.config.php 中启用模块
  3. 将位于 ./vendor/hrevert/ht-time-zone/config/ht-time-zone.global.php 的文件复制到 ./config/autoload/ht-time-zone.global.php,并根据您的需要进行更改

文档

Doctrine 类型

如果您使用 doctrine DBAL,则可以使用此模块提供的 DBAL 类型来自动化时区转换。

包含的 DBAL 类型

  1. HtTimeZone\DBAL\Types\UTCDateTimeType
  2. HtTimeZone\DBAL\Types\UTCTimeType
  3. 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',
                ],
            ]
        ],
    ],
];

过滤器

此模块包含一些与时区相关的过滤器。如果您不了解过滤器,请先阅读 这里

包含的过滤器

  1. HtTimeZone\Filter\TimeZoneConverter
  2. ClientToServerTimeZone
  3. 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());

使用视图助手

此模块包含两个视图助手,使我们的工作更加轻松。

  1. htTimeZone
  2. 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`

填充策略

  1. HtTimeZone\Stdlib\Hydrator\Strategy\TimeZoneConverter
  2. HtTimeZone\Stdlib\Hydrator\Strategy\TimeZoneStringStrategy

正在进行中

这是一个正在进行中的项目。使用时请自行承担风险!