【问题标题】:php mysql and mobile clients, displaying dates from UTC to different timezones [closed]php mysql和移动客户端,显示从UTC到不同时区的日期[关闭]
【发布时间】:2015-09-25 08:51:40
【问题描述】:

我有一个带有 MySQL 的 RESTful PHP 后端,它服务于 android 和 ios 客户端,我们有来自不同时区的用户,数据库中的日期是 UTC。

为了在用户当前时区显示这些日期,我花了几天时间研究,并与移动开发人员交谈,最终提出了这个建议:

1) Android 或 iOS 设备启动时,将当前设备时间发送给服务器,服务器计算两次之间的偏移量并返回给客户端,例如 -03:30

2) 客户端存储该响应 (-03:30),并将其与正在执行的每个请求一起发送到一个标头字段到后端。

3) 当 PHP 想要选择一个日期时,它会获取该请求标头值,对其进行验证并使用该值如下

"SELECT CONVERT_TZ(field,'+00:00','-03:30')"

这就是必须要做的事情的要点吗?我错过了更好的解决方案吗?

我想知道您对以上 3 个步骤的看法,特别是第一步,因为一开始我认为移动开发人员可以根据服务器时间戳执行此计算,但被拒绝了。

感谢您的帮助!

【问题讨论】:

  • 由于客户端知道时区,更好的解决方案是让 API 发送 UTC 日期并让客户端将其转换为所需的时区。我不确定为什么您的移动开发人员会拒绝这样做;这就是通常的做法。

标签: php android ios mysql timezone


【解决方案1】:

在数据库中存储所有 UTC(GMT+0) 的日期,然后将它们从数据库中检索到客户端(电话设备)中。

然后让每个设备在收到时间戳后应用偏移量。潜在示例:

TimeZone tz = TimeZone.getDefault();
Date databaseUTCTime = getFromDB();
int offsetFromUtc = tz.getOffset(databaseUTCTime.getTime()) / 1000;

如果您想共享用户的时间,包括他们的时区,也许还存储不是 UTC 的时间戳并在没有偏移的情况下转换它?

$t = date('d-m-Y H:i:s', $raw_stored_time);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多