我有一个简单但困难的问题:-)。我正在Laravel中构建一个基于API的应用程序。 该应用程序的用户将来自不同的时区。
问题:我怎样才能正确处理这个问题?
到目前为止我做了什么:
- 在应用程序中.php我将"时区"设置为"UTC">
- "我的用户"表具有时区列
- 我使用camroncade/时区套餐
据我了解上述软件包的文档,我现在应该将从数据库获取的所有日期时间转换为用户的时区,然后返回转换后的时间。此外,当用户将日期时间发送到服务器(以他们的时区)时,服务器应将其转换回 UTC 并将其存储在数据库中。
这是完全有道理的。但是,缺点是我需要找到时间传入/传出服务器的所有点,并通过时间转换拦截这些点。此外,使用此解决方案,如何转换 laravel 生成的创建和更新时间戳?真的没有更好的方法吗?
我能想到的解决方案:
-
一种可能的解决方案是仅在服务器端使用 UTC,并使用客户端逻辑(例如在 iOS 应用程序中)与用户的本地时区进行转换。这意味着从 API 向后只有 UTC 时间戳。
-
另一种解决方案可能是安装某种中间件来拦截所有 API 通信并进行转换。但是,我不知道该怎么做,这肯定会产生很多开销。
如何解决问题?
谢谢你的想法, 迈克尔
我对 Laravel 了解不多,但我知道时区和应用程序开发。 我可以说,一般来说,您不应该尝试统一转换时区,而是在需要转换时将时区视为业务逻辑的输入参数。
以此类推,考虑一下你是否不是在谈论时间,而是在谈论金钱。 每个用户都有不同的货币。 您真的想将货币转换的逻辑应用于进出系统的所有货币值吗? 当然,您可以,但是如果值以一种货币接受并且需要以另一种货币显示怎么办? 或者如果货币汇率发生变化怎么办? 通过在业务逻辑之外应用转换,您使代码更容易,但代价是将自己锁定在功能之外,并可能创建微妙且难以诊断的错误。