medicplus / laravel-timezone
Laravel 时区存储、检索和日期转换(基于 jamesmills/laravel-timezone)
Requires
- php: ^8.0|^8.1|^8.2|^8.3
- laravel/framework: ^9.0|^10.0|^11.0
- nesbot/carbon: ^2.0|^3.0
- torann/geoip: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.51
README
为您的应用程序设置用户时区的一种简单方法,然后以用户本地时区显示日期/时间。
这是对 jamesmills/laravel-timezone 的重实现,并包含来自 amandiobm/laravel-timezone 的 cast 功能。
要求
支持的 Laravel 版本 9.x、10.x 和 11.x
如何使用
此包监听 \Illuminate\Auth\Events\Login 事件,然后自动在您的 user 模型(存储在数据库中)上设置时区。
此包使用 torann/geoip 包,根据用户的 IP 地址查找用户的位置。该包还返回有关用户的货币和时区等信息。 如果需要,您可以单独配置此包。
使用方法
您可以使用以下方式向您的用户显示他们时区的日期:
{{ Timezone::convertToLocal($post->created_at) }}
或者使用我们漂亮的 blade 指令
@displayDate($post->created_at)
安装
您可以通过 composer 安装此包
composer require medicplus/laravel-timezone
您可以使用以下命令发布并运行迁移:
php artisan vendor:publish --provider="MedicPlus\LaravelTimezone\LaravelTimezoneServiceProvider" --tag=migrations
php artisan migrate
这将向您的 users 表添加一个 timezone(可以在配置文件中更改)列。
示例
向用户显示其时区的日期/时间
默认情况下将使用格式 jS F Y g:i:a 并不显示时区
{{ Timezone::convertToLocal($post->created_at) }}
// 4th July 2018 3:32:am
如果您希望,您可以设置自定义格式并包含时区的良好版本
{{ Timezone::convertToLocal($post->created_at, 'Y-m-d g:i', true) }}
// 2018-07-04 3:32 New York, America
使用 blade 指令
一次一小步,让您的生命更轻松
@displayDate($post->created_at) // 4th July 2018 3:32:am
并且使用自定义格式化
@displayDate($post->created_at, 'Y-m-d g:i', true) // 2018-07-04 3:32 New York, America
使用模型转换类
您可以使用转换类为您的模型列,这将允许您以 UTC 格式保存日期并使用属性访问器在用户时区中获取它们。
<?php namespace App; use Illuminate\Database\Eloquent\Model; use MedicPlus\LaravelTimezone\Casts\Timezone; class Foo extends Model { /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'created_at' => Timezone::class, ]; }
以 UTC 格式保存用户输入到数据库中
这将获取日期/时间,将其设置为用户的时区,然后作为 UTC 的 Carbon 实例返回。
$post = Post::create([ 'publish_at' => Timezone::convertFromLocal($request->get('publish_at')), 'description' => $request->input('description'), ]);
自定义配置
发布配置文件是可选的。
php artisan vendor:publish --provider="MedicPlus\LaravelTimezone\LaravelTimezoneServiceProvider" --tag=config
闪存消息
设置时区后,我们将显示闪存消息。默认情况下,已配置为使用 Laravel 默认的闪存消息,以下是一些可选集成。
laracasts/flash - 'flash' => 'laracasts'
mercuryseries/flashy - 'flash' => 'mercuryseries'
spatie/laravel-flash - 'flash' => 'spatie'
mckenziearts/laravel-notify - 'flash' => 'mckenziearts'
usernotnull/tall-toasts - 'flash' => 'tall-toasts'
要覆盖此配置,您只需更改配置文件 config/timezone.php 中所需的包的 flash 属性。您可以通过设置 'flash' => 'off' 来禁用闪存消息。
覆盖数据库中的现有时区
默认情况下,时区将在每次登录时覆盖为当前用户时区。此行为可以通过设置配置选项 'overwrite' => false, 仅在时区为空时更新时区来限制。
默认格式
默认情况下,日期格式将是 jS F Y g:i:a。要覆盖此配置,您只需更改配置文件 config/timezone.php 中的 format 属性即可实现所需格式。
列名
默认情况下,此包使用用户模型中的 timezone 列,如果您想使用不同的列名,可以更改配置文件 config/timezone.php 中的 column_name 属性。如果您已经执行了迁移,请确保在应用此更改之前回滚更改。
查找数组
此查找数组配置使您能够在 Laravel request 辅助函数的任何属性中,通过任何键找到用户的远程地址。考虑到当键在属性中找到时,将使用该键。默认情况下,我们使用带有键 REMOTE_ADDR 的 server 属性。要覆盖此配置,您只需更改配置文件 config/timezone.php 中的 lookup 属性即可实现所需的查找。
用户消息
您可以通过更改配置文件 config/timezone.php 中的 message 属性来配置当设置时显示给用户的消息。
底层 GeoIp 包
如果您想自定义底层的 torann/geoip 包,可以使用以下命令发布配置文件。
php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config
更新日志
有关最近更改的更多信息,请参阅 更新日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
有关如何报告安全漏洞的更多信息,请参阅 我们的安全策略。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。