gnireeg/laravel-timezoned 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

gnireeg/laravel-timezoned

Composer 安装命令:

composer require gnireeg/laravel-timezoned

包简介

A lightweight Laravel package that provides a trait to automatically convert all date attributes of an Eloquent model from the database timezone to the user's timezone - and convert incoming user-provided dates back to the database timezone as well.

README 文档

README

A lightweight Laravel package that automatically converts Eloquent model date attributes between the database timezone and the user's timezone.

  • DB → User timezone when reading attributes
  • User → DB timezone when writing attributes

This ensures consistent and intuitive date handling across different user timezones.

Installation

composer require gnireeg/laravel-timezoned

Optionally publish the config:

php artisan vendor:publish --tag=config

Usage

use Gnireeg\LaravelTimezoned\HasTimezoneConversion;

class Event extends Model
{
    use HasTimezoneConversion;

    protected array $timezonedAttributes = ['starts_at', 'ends_at'];
}

Reading Attributes

// Automatically converted to user's timezone
$event->starts_at; // Returns Carbon in user's timezone

Writing Attributes

// Automatically converted to database timezone
$event->starts_at = '2025-03-10 15:00';
$event->save();

Raw Attribute Access

// Get the value in database timezone (bypass conversion)
$event->getRawAttribute('starts_at');

Configuration

The package config (config/timezoned.php) has two options:

Timezone Resolver

Determines the user's timezone. Receives the model instance as a parameter.

// Default: uses authenticated user's timezone
'timezone_resolver' => function ($model) {
    return auth()->user()?->timezone ?? 'UTC';
},

// Or use session
'timezone_resolver' => fn() => session('timezone', 'UTC'),

// Or request header
'timezone_resolver' => fn() => request()->header('X-Timezone', 'UTC'),

Database Timezone

The timezone your database stores dates in. Set to null to use config('app.timezone').

'database_timezone' => null, // Uses app.timezone
'database_timezone' => 'UTC', // Explicit UTC

How It Works

The trait overrides two Eloquent methods:

  • getAttribute() - converts dates from database timezone to user's timezone
  • setAttribute() - converts dates from user's timezone to database timezone

Both Carbon and CarbonImmutable instances are supported.

Requirements

  • PHP >= 8.1
  • Laravel 10, 11, or 12
  • Carbon >= 2

Testing

composer test

License

MIT

gnireeg/laravel-timezoned 适用场景与选型建议

gnireeg/laravel-timezoned 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 11 月 23 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 gnireeg/laravel-timezoned 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 gnireeg/laravel-timezoned 我们能提供哪些服务?
定制开发 / 二次开发

基于 gnireeg/laravel-timezoned 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 4
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 26
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-11-23