seoservice2020 / laravel-timezone
Laravel 的时区存储和检索
Requires
- php: >=7.4
- laravel/framework: 5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8
- nesbot/carbon: ^1.0 || ^2.0
- torann/geoip: ^3.0-stable
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.12
- dev-master
- 2.0.1
- 2.0.0
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- 1.8.1
- 1.8.0
- 1.7.0
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-new-version
- dev-analysis-4xOW0k
- dev-enhancements
- dev-laravel-8-security-updates
- dev-pullrequests/keenminded/forked
- dev-pullrequests/jonnymccullagh/diffForHumans
This package is auto-updated.
Last update: 2024-09-14 05:06:44 UTC
README
为您的应用程序中用户设置时区,并在他们的本地时区中显示日期/时间的一种简单方法。
工作原理
此包监听 \Illuminate\Auth\Events\Login 事件,然后自动在您的 user 模型(存储在数据库中)上设置时区。它根据用户的 detect_timezone 属性来决定是否更新用户时区,如果没有设置,则根据配置中的默认值。对于未经授权的路由,由于无法访问认证用户信息,包将使用其配置中的默认时区。
此包使用 torann/geoip 包,根据用户的 IP 地址查找用户的位置。该包还返回有关用户货币和用户时区等信息。 如果需要,您可以单独配置此包。
如何使用
您可以使用以下方法向您的用户显示他们的时区中的日期
{{ Timezone::convertToLocal($post->created_at) }}
或者使用我们漂亮的 blade 指令
@displayDate($post->created_at)
安装
使用 Composer 拉取此包
composer require seoservice2020/laravel-timezone
默认时区属性位置
默认情况下,时区属性放置在 users 表中。如果您希望使用此默认值,请参阅以下说明。
发布数据库迁移
php artisan vendor:publish --provider="SEOService2020\Timezone\TimezoneServiceProvider" --tag=migrations
运行数据库迁移。这将向您的 users 表中添加 timezone 和 detect_timezone 列。请注意,迁移将放置到默认 Laravel 迁移文件夹中,因此如果您使用自定义文件夹,则应将迁移文件移动到适当的位置。
php artisan migrate
更新用户模型
将 SEOService2020\Timezone\Traits\HasTimezone 特性添加到您的 user 模型
use HasTimezone;
如果您希望直接处理 detect_timezone 属性,可以为您的 User 模型添加布尔类型转换
protected $casts = [ 'detect_timezone' => 'boolean', ];
如果您希望在用户创建时设置每个用户的时区,可以将 detect_timezone 属性添加到您的 User 模型的 fillable 属性
protected $fillable = [ 'detect_timezone', ];
自定义时区属性位置
如果您希望为 timezone 和 detect_timezone 属性使用不同的位置,例如 Profile 模型,则应覆盖 HasTimezone 特性,并在您的 User 模型中使用覆盖后的一个。
示例
向用户显示他们的时区中的日期/时间
默认将使用格式 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
如果您希望进一步处理转换后的 Carbon 实例,可以使用 toLocal 方法
{{ Timezone::toLocal($post->created_at)->diffForHumans() }}
// diff calculated relative to datetime with user-end timezone
使用 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 的数据库中
这将获取日期/时间,将其设置为用户的时区,然后作为 UTC 的 Carbon 实例返回。
$post = Post::create([ 'publish_at' => Timezone::convertFromLocal($request->get('publish_at')), 'description' => $request->input('description'), ]);
自定义配置
发布配置文件是可选的。
php artisan vendor:publish --provider="SEOService2020\Timezone\TimezoneServiceProvider" --tag=config
闪存消息
当时区设置后,我们显示一条闪存消息。默认情况下,配置为使用 Laravel 默认的闪存消息,以下是一些可选的集成。
laracasts/flash - 'flash' => 'laracasts'
mercuryseries/flashy - 'flash' => 'mercuryseries'
spatie/laravel-flash - 'flash' => 'spatie'
mckenziearts/laravel-notify - 'flash' => 'mckenziearts'
要覆盖此配置,您只需更改配置文件 config/timezone.php 中相应软件包的 flash 属性。您可以通过将 'flash' => 'off' 来禁用闪存消息。
覆盖数据库中的现有时区
如果为该用户设置 detect_timezone 为 true,则用户时区将在每次登录时被当前用户时区覆盖。如果此属性未设置,则默认情况下将覆盖时区。可以通过设置配置选项 'overwrite' => false, 来限制只有当时区为空时才更新时区。
默认格式
默认情况下,日期格式将是 jS F Y g:i:a。要覆盖此配置,您只需更改配置文件 config/timezone.php 中相应格式的 format 属性。
查找数组
此查找数组配置使您可以通过任何键在任何 Laravel request 助手属性中找到用户的远程地址。当在属性中找到该键时,将使用该键。默认情况下,我们使用具有键 REMOTE_ADDR 的 server 属性。要覆盖此配置,您只需更改配置文件 config/timezone.php 中的 lookup 属性。
底层 GeoIp 包
如果您希望自定义底层 torann/geoip 包,可以使用以下命令发布配置文件。
php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
许可
此包是 100% 免费和开源的,受 MIT 许可协议保护。您可以使用它来完成任何您想做的事情。
此包是 Treeware。如果您在生产环境中使用它,我们请求您为世界购买一棵树,以感谢我们的工作。通过为 Treeware 森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
问题
如果您收到类似 This cache store does not support tagging 的消息,这是因为在 torann/geoip 包中需要支持标签的缓存驱动程序,而您可能已将应用程序设置为使用 file 缓存驱动程序。您可以发布 torann/geoip 包的配置文件 并设置 'cache_tags' => null, 以解决此问题。在此处了解更多关于此问题的信息。