我有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个步骤了解您的意见,特别是第一步,因为我认为移动开发人员可以根据服务器时间戳执行此计算,但被拒绝了。
感谢您的帮助!
答案 0 :(得分: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);