【问题标题】:Showing datetimes with different time zones in order according to user's timezone根据用户的时区顺序显示具有不同时区的日期时间
【发布时间】:2019-08-24 14:54:11
【问题描述】:

我在不同的国家有 2 家商店(比如说美国和日本)

还有一个用户在德国 GMT +2 使用我的应用程序

两家商店根据其时区给我订购日期

美国的商店位于 LA GMT -7 日本店铺位于东京GMT+9

假设同时销售两个订单

我想按照德国时区的顺序向用户显示订单

我的问题是我应该如何在 mysql 中存储订单日期(时间戳(int)或日期时间)以及如何将这些日期转换为用户的时区

--编辑--

对于那些想要将时间戳转换为带有时区的日期时间的人

            $timestamp = 1554280893 ;
            $datetimeFormat = 'Y-m-d H:i:s';

            $date = new DateTime("America/New_York");

            $date->setTimestamp($timestamp);

$utc=new DateTime($date->format($datetimeFormat),new DateTimeZone("America/New_York"));

            $utc->setTimezone(new DateTimeZone("UTC"));

            echo  $utc->format("Y-m-d H:i:s");

我将所有时间戳转换为 UTC 格式并存储在数据库中。然后我使用 Mysql 的 CONVERT_TZ() 函数根据用户的时区对所有数据进行排序

【问题讨论】:

  • 以任何一种格式存储日期,但确保在保存之前将它们转换为 UTC 时间(即,根据商店的时区添加或减去正确的小时数。然后当你来显示它时再次,从数据库中获取 UTC 时间,并将记录的时间从 UTC 转换为所需的任何时区

标签: php mysql datetime


【解决方案1】:

最好将日期时间保存为 UTC 并根据用户的时区显示。使用 CONVERT_TZ(orderDate,'+00:00','+02:00') 转换 SQL 查询中的日期时间

【讨论】:

    【解决方案2】:

    UTC 是在 mysql 中保存日期和时间的更好格式。始终根据用户所在的区域显示此内容。

    首先:转换保存到 MySQL 之前的时间。

    第二: 通过(在您的 mysql 查询中)使用 CAST

    SELECT CAST(getdate() AS 日期);

    希望这将使用 mysql 日期和时间函数来解决。 有关更多信息,请查看以下内容:

    mysql date and time functions

    【讨论】:

    • 这个查询在我的情况下工作正常,在你的情况下也很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2013-02-15
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多