medicplus/laravel-timezone
最新稳定版本:v1.0.2
Composer 安装命令:
composer require medicplus/laravel-timezone
包简介
Timezone storage, retrieval and date conversion for Laravel (Based on jamesmills/laravel-timezone)
README 文档
README
An easy way to set a timezone for a user in your application and then show date/times to them in their local timezone.
This is a reimplementation of jamesmills/laravel-timezone and the cast feature from amandiobm/laravel-timezone
Requirements
Supported Laravel versions 9.x, 10.x, 11.x and 12.x
How does it work
This package listens for the \Illuminate\Auth\Events\Login event and will then automatically set a timezone on your user model (stored in the database).
This package uses the torann/geoip package which looks up the users location based on their IP address. The package also returns information like the users currency and users timezone. You can configure this package separately if you require.
How to use
You can show dates to your user in their timezone by using
{{ Timezone::convertToLocal($post->created_at) }} Or use our nice blade directive
@displayDate($post->created_at)
Installation
You can install the package via composer:
composer require medicplus/laravel-timezone
You can publish and run the migrations with:
php artisan vendor:publish --provider="MedicPlus\LaravelTimezone\LaravelTimezoneServiceProvider" --tag=migrations php artisan migrate This will add a timezone (can be changed in the configuration file) column to your users table.
Examples
Showing date/time to the user in their timezone
Default will use the format jS F Y g:i:a and will not show the timezone
{{ Timezone::convertToLocal($post->created_at) }} // 4th July 2018 3:32:am If you wish you can set a custom format and also include a nice version of the timezone
{{ Timezone::convertToLocal($post->created_at, 'Y-m-d g:i', true) }} // 2018-07-04 3:32 New York, America Using blade directive
Making your life easier one small step at a time
@displayDate($post->created_at) // 4th July 2018 3:32:am
And with custom formatting
@displayDate($post->created_at, 'Y-m-d g:i', true) // 2018-07-04 3:32 New York, America
Using models casting class
You can use the casting class for your models columns, this will let you save the dates in UTC format and then use the attribute accessor to get them in the user timezone.
<?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, ]; }
Saving the users input to the database in UTC
This will take a date/time, set it to the users timezone then return it as UTC in a Carbon instance.
$post = Post::create([ 'publish_at' => Timezone::convertFromLocal($request->get('publish_at')), 'description' => $request->input('description'), ]);
Custom Configuration
Publishing the config file is optional.
php artisan vendor:publish --provider="MedicPlus\LaravelTimezone\LaravelTimezoneServiceProvider" --tag=config
Flash Messages
When the timezone has been set, we display a flash message, By default, is configured to use Laravel default flash messaging, here are some of the optional integrations.
laracasts/flash - 'flash' => 'laracasts'
mercuryseries/flashy - 'flash' => 'mercuryseries'
spatie/laravel-flash - 'flash' => 'spatie'
mckenziearts/laravel-notify - 'flash' => 'mckenziearts'
usernotnull/tall-toasts - 'flash' => 'tall-toasts'
To override this configuration, you just need to change the flash property inside the configuration file config/timezone.php for the desired package. You can disable flash messages by setting 'flash' => 'off'.
Overwrite existing timezones in the database
By default, the timezone will be overwritten at each login with the current user timezone. This behavior can be restricted to only update the timezone if it is blank by setting the 'overwrite' => false, config option.
Default Format
By default, the date format will be jS F Y g:i:a. To override this configuration, you just need to change the format property inside the configuration file config/timezone.php for the desired format.
Column Name
By default, this package uses the column timezone in the users model, if you want to use a different column name you can change the column_name property inside the configuration file config/timezone.php. If you already executed the migrations, make sure to rollback the changes before applying this change.
Lookup Array
This lookup array configuration makes it possible to find the remote address of the user in any attribute inside the Laravel request helper, by any key. Having in mind when the key is found inside the attribute, that key will be used. By default, we use the server attribute with the key REMOTE_ADDR. To override this configuration, you just need to change the lookup property inside the configuration file config/timezone.php for the desired lookup.
User Message
You may configure the message shown to the user when the timezone is set by changing the message property inside the configuration file config/timezone.php
Underlying GeoIp Package
If you wish to customise the underlying torann/geoip package you can publish the config file by using the command below.
php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
medicplus/laravel-timezone 适用场景与选型建议
medicplus/laravel-timezone 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14.55k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「timezone」 「laravel-timezone」 「medicplus」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 medicplus/laravel-timezone 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 medicplus/laravel-timezone 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 medicplus/laravel-timezone 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
User timezone helpers for Laravel.
Datetime helpers for timezone handling
A custom Doctine DBAL type to use PHP DateTime objects set to the system's default timezone.
Official PHP SDK for the IPGeolocation.io IP Location API with single and bulk lookup support.
Geonames importer and models for Eloquent ORM. This repo is a fork from Yurtesen/Geonames.
Alfabank REST API integration
统计信息
- 总下载量: 14.55k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 19
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-04