基于Laravel的API应用程序中的时区转换

时间:2017-03-27 19:57:25

标签: laravel api timezone

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

问题:我该如何妥善处理?

到目前为止我做了什么:

  • 在app.php中我设置了#time;&time;到' UTC'
  • 我的用户表有一个时区列
  • 我使用camroncade / timezone package

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

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

我能想到的解决方案:

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

  • 另一种解决方案可能是安装某种拦截所有api通信并进行转换的中间件。但是,我不知道如何做到这一点,肯定会产生很多开销。

我该如何解决这个问题?

感谢你的想法, 迈克尔

1 个答案:

答案 0 :(得分:1)

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

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