拉拉维尔:如何处理不同时区的日期



关于这个主题已经问了很多问题。我找到的最佳答案是这个:如何在 laravel 中设置本地时区 因此,主要规则是将所有数据库条目保留在同一时区。

但是我有一个特定的情况,这个答案对我不起作用。对于某些型号,我只有一个日期(没有日期戳)。示例:假设我只存储提出此问题的日期 (= 2018-01-25)。然而,在欧洲已经是2018-01-26。有人对此有解决方案吗?

将我的日期字段更改为日期戳?现有日期怎么办?

您可以使用此库 詹姆斯米尔斯/拉拉维尔时区

如果您需要自定义配置:

  1. 将应用时区配置为 UTC。

    "时区" => "UTC",

  2. 您可以在数据库列中存储不同的时区。

  3. 输出/显示日期时,只需将其格式化为使用该时区即可。

    $timezone ='美国/温哥华';
    $model->created_at->设置时区($timezone);

created_atupdated_at会自动转换为碳实例,这使得这更容易。如果您有其他正在使用的日期,请将它们添加到模型上的受保护$dates数组中,laravel也会将它们转换为碳实例。然后你可以使用碳 setTimezone() 将日期/时间更改为时区。

如果您只是在谈论日期,那么就没有时间成分,因此时区无关紧要。 因此,大多数平台没有单独的区域日期类型。

您说得对,并非每个时区都经历相同的日期,并且日期的开始和日期的结束发生在不同时区的不同时间。 但是,您是否注意到在前一句中,我不得不使用"时间"一词来合理化这些要点? :-)

因为没有时间,日期和时间区域不会放在一起,所以将它们放在同一个字段中是没有意义的。 相反,请在模型中保留两个字段 - 一个用于日期,一个用于时区。 在许多情况下,您甚至可能会发现它们属于两种不同的模型。

作为用例示例,请考虑生日。 我的是1976-08-27. 仅此而已 - 只是一个约会。 我出生的时区无关紧要,我所在的时区也是如此 -直到我想评估它目前是否是我的生日(或距离我的生日还有多长时间等)。 对于这些操作,我当前的时区很重要,该时区的开始时间和结束时间也很重要。 因此 - 两个不同的领域。

相关内容

  • 没有找到相关文章

最新更新