【问题标题】:Time zone conversion in a Laravel-based API app基于 Laravel 的 API 应用程序中的时区转换
【发布时间】:2026-01-21 20:50:02
【问题描述】:

我有一个简单但困难的问题:-)。我正在 Laravel 中构建一个基于 API 的应用程序。 该应用的用户将来自不同的时区。

问题:我该如何正确处理?

到目前为止我做了什么:

  • 在 app.php 中我将 'timezone' 设置为 'UTC'
  • 我的用户表有一个时区列
  • 我使用 camroncade/timezone 包

据我了解上述软件包的文档,我现在应该将从数据库获取的所有日期时间转换为用户的时区,然后返回转换后的时间。此外,当用户向服务器发送日期时间(在他们的时区)时,服务器应将其转换回 UTC 并将其存储在数据库中。

这完全有道理。但是,缺点是我需要找到所有时间从服务器传输到/从服务器的点,并通过时间转换拦截那些点。此外,使用此解决方案,我如何转换 laravel 生成的创建和更新时间戳?真的没有更好的办法吗?

我能想到的解决方案:

  • 一种可能的解决方案是仅在服务器端使用 UTC,并使用客户端逻辑(例如在 iOS 应用程序中)与用户的本地时区进行转换。这意味着从 API 向后只有 UTC 时间戳。

  • 另一种解决方案可能是安装某种中间件来拦截所有 api 通信并进行转换。但是,我不知道该怎么做,而且肯定会产生大量开销。

我该如何解决这个问题?

感谢您的想法, 迈克尔

【问题讨论】:

    标签: laravel api timezone


    【解决方案1】:

    我不太了解 Laravel,但我确实了解时区和应用程序开发。我可以说,一般来说,你不应该尝试统一转换时区,而应该在需要转换时将时区作为业务逻辑的输入参数。

    以此类推,考虑一下您是否谈论的不是时间,而是金钱。每个用户都有不同的货币。您真的想将货币转换的逻辑应用于进出系统的所有货币价值吗?当然可以,但是如果值以一种货币接受并且需要以另一种货币显示怎么办?或者如果货币汇率发生变化怎么办?通过在业务逻辑之外应用转换,您可以更轻松地编写代码,但代价是您无法使用功能并可能产生难以诊断的细微错误。

    【讨论】:

      最近更新 更多