jessedp/php-timezones

针对 Laravel 的基本时区工具

v0.2.3 2023-03-23 17:52 UTC

This package is auto-updated.

Last update: 2024-09-23 21:05:21 UTC


README

Latest Version MIT Licensed Test Status Quality Score Total Downloads

一个包装器,以简化的方式枚举 PHP 5.6+、7.x、8.x 的时区,以便以各种方式使用。

这是针对 Laravel 5.5+ 设计的 - YMMV elsewhere.

基本功能

  • 基于 PHP 支持的时区创建时区数组,可选按地区分组
  • 列表按偏移量从高到低排序(+14:00 到 -11:00)
  • 可选按地区分组数组(多维关联数组)
    • 排序相同,但仅在各个地区内部
  • 在两种情况下,都返回以下内容
    • php 数组,供您随意使用
    • HTML 选择列表
  • 两个用于转换到/从 UTC 的实用函数

安装

您可以使用 Composer 安装此包。

$ composer require jessedp/php-timezones

Using version ^0.2.0 for jessedp/php-timezones
./composer.json has been updated
    ...

用法

1. 渲染时区 HTML 选择列表

Timezones::create() 方法有三个参数

Timezones::create($name, $selected, $opts);
  • $name 必需 - 选择元素的 名称
  • $selected - 设置列表框的选中值,假设选项中存在一个值
  • $opts - 选项的数组,作为键=>值
    • attr => 数组,包含要包含在选择元素中的键=>值对(例如,'id','class' 等)
    • withregions => _boolean 是否使用选项组来表示地区/大陆(默认为 false)
    • regions => 数组(字符串),指定要包含的地区

基本示例

Timezones::create('timezone');

返回类似于以下字符串

<select name="timezone">
  ...
  <option value="Africa/Abidjan">(GMT/UTC + 00:00) Abidjan</option>
  <option value="Africa/Accra">(GMT/UTC + 00:00) Accra</option>
  ...
</select>

示例

与上述示例相同,但 Asia/Ho_Chi_Minh 将默认选中

Timezones::create('timezone', 'Asia/Ho_Chi_Minh');

选项示例

您还可以使用数组添加多个属性。

Timezones::create('timezone', null,
            ['attr'=>[
             'id'    => 'my_id',
             'class' => 'form-control'
            ]
        ]);

这将给我们

<select name="timezone" id="my_id" class="form-control">
  <option value="Pacific/Apia">
    (GMT/UTC + 14:00)&nbsp;&nbsp;&nbsp;&nbsp;Pacific/Apia
  </option>
  <option value="Pacific/Kiritimati">
    (GMT/UTC + 14:00)&nbsp;&nbsp;&nbsp;&nbsp;Pacific/Kiritimati
  </option>
  ...
  <option value="Asia/Shanghai">
    (GMT/UTC + 08:00)&nbsp;&nbsp;&nbsp;&nbsp;Asia/Shanghai
  </option>
  <option value="Asia/Singapore">
    (GMT/UTC + 08:00)&nbsp;&nbsp;&nbsp;&nbsp;Asia/Singapore
  </option>
  <option value="Asia/Taipei">
    (GMT/UTC + 08:00)&nbsp;&nbsp;&nbsp;&nbsp;Asia/Taipei
  </option>
  ...
  <option value="America/New_York">
    (GMT/UTC − 05:00)&nbsp;&nbsp;&nbsp;&nbsp;America/New York
  </option>
  ...
</select>

地区/分组示例

假设您想要选项组但只包含几个地区...

Timezones::create('timezone',null,
                    ['attr'=>['class'=>'form-control'],
                    'with_regions'=>true,
                    'regions'=>['Africa','America']
                    ])

这将返回类似于以下字符串

<select name="timezone" class="form-control">
  <optgroup label="Africa">
    <option value="Africa/Addis_Ababa">
      (GMT/UTC + 03:00)&nbsp;&nbsp;&nbsp;&nbsp;Addis Ababa
    </option>
    <option value="Africa/Asmara">
      (GMT/UTC + 03:00)&nbsp;&nbsp;&nbsp;&nbsp;Asmara
    </option>
    ...
  </optgroup>
  <optgroup label="America">
    ...
    <option value="America/Noronha">
      (GMT/UTC − 02:00)&nbsp;&nbsp;&nbsp;&nbsp;Noronha
    </option>
    ...
    <option value="America/Argentina/Buenos_Aires">
      (GMT/UTC − 03:00)&nbsp;&nbsp;&nbsp;&nbsp;Argentina/Buenos Aires
    </option>
    ...
    <option value="America/New_York">
      (GMT/UTC − 05:00)&nbsp;&nbsp;&nbsp;&nbsp;New York
    </option>
    ...
  </optgroup>
</select>

2. 渲染时区数组

您还可以将时区列表作为数组渲染。要这样做,只需使用 Timezones::toArray() 方法。

在 Laravel 中的示例

$timezone_list = Timezones::toArray();

3. 实用方法

该包包括两个方法,可轻松处理时区的显示和存储,convertFromUTC()convertToUTC()

每个函数接受两个必需参数和一个可选的第三个参数,该参数处理返回时间戳的格式。

    Timezones::convertFromUTC($timestamp, $timezone, $format);
    Timezones::convertToUTC($timestamp, $timezone, $format);

第一个参数接受时间戳,第二个参数接受要转换到/从的时区名称。您可以直接将这些与选择表单构建器中包含的时区相关联的选项值插入其中。或者,您可以使用 PHP 支持的时区 中的任何时区。

第三个参数是可选的,默认设置为 'Y-m-d H:i:s' ,这是 Laravel 将日期时间存储到数据库中的方式(created_atupdated_at 列)。如果您将其用于显示目的,您可能会发现将 '(e)' 包含在格式字符串中,以显示时区。

感谢

这是基于

Spatie group 和具体到 laravel-analytics 项目,我使用了 作为灵感 复制了结构