php mysql和移动客户端,显示从UTC到不同时区的日期

php mysql和移动客户端,显示从UTC到不同时区的日期,php,android,ios,mysql,timezone,Php,Android,Ios,Mysql,Timezone,我有一个带有MySQL的RESTful PHP后端,它服务于android和ios客户端,我们有来自不同时区的用户,数据库中的日期以UTC为单位 为了在用户当前时区中显示这些日期,我花了几天时间进行研究,并与移动开发人员交谈,最后提出了以下建议: 1) 当Android或iOS设备启动时,它将当前设备时间发送到服务器,服务器根据该时间计算两次之间的偏移量并返回到客户端,例如-03:30 2) 客户机存储该响应(-03:30),并将其与正在执行的每个请求一起发送到后端 3) 当PHP想要选择一个日

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

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

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

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

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

"SELECT CONVERT_TZ(field,'+00:00','-03:30')"
这就是必须做的事情的要点吗?我是否错过了更好的解决方案

我想知道你对以上三个步骤的看法,特别是第一步,因为我最初以为移动开发者可以根据服务器时间戳进行计算,但被拒绝了

谢谢你的帮助

将所有日期以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);

由于客户端知道时区,更好的解决方案是让API发送UTC日期,并让客户端将其转换为所需的时区。我不知道为什么你的手机开发者会拒绝这样做;这是通常的做法。