如何处理用户';如果用户';使用PHP进行时区更改

如何处理用户';如果用户';使用PHP进行时区更改,php,mysql,cron,timezone,Php,Mysql,Cron,Timezone,如果用户将提醒通知时间精确设置为8am,则即使移动到不同的时区,他也应在8am获得通知 我的意思是,如果他搬到任何其他时区不同的国家,即使在那之后,他也应该在该国上午8点收到通知 要发送通知,我使用CRON,它在UTC timezone中运行 考虑这个例子,用户的提醒时间是IST(+5:30)中的上午8点,我正在将UTC中的2:30存储到数据库中。但如果他搬到东部夏令时(-4:00)时区怎么办?但我也有大量的用户数据 考虑到我必须使用PHP执行该操作,并且数据库是MySQL我将通过CRON在服务

如果用户将提醒通知时间精确设置为
8am
,则即使移动到不同的
时区
,他也应在
8am
获得通知

我的意思是,如果他搬到任何其他时区不同的国家,即使在那之后,他也应该在该国上午8点收到通知

要发送通知,我使用
CRON
,它在
UTC timezon
e中运行

考虑这个例子,用户的提醒时间是
IST(+5:30)
中的上午8点,我正在将UTC中的
2:30
存储到数据库中。但如果他搬到东部夏令时(-4:00)时区怎么办?但我也有大量的用户数据


考虑到我必须使用PHP执行该操作,并且数据库是
MySQL

我将通过
CRON
在服务器上执行所有通知操作,请建议解决方案。让我们想象一个简单的例子:

1) 您生活在一个国家a,该国家有
GMT+3
时区。现在是格林尼治标准时间14:00+3。您在国家B召开会议,该国位于
GMT+1
之下

2) 您在该国家/地区的会议时间为
16:00 GMT+1或18:00 GMT+3
。离会议还有4个小时

3) 您在应用程序中设置了在
18:00 GMT+3
召开会议的预约。服务器中的所有约会都保存为
GMT+0
,因此此约会保存为
15:00 GMT+0

4) 让我们想象你传送到会议所在国,时间现在是
12:00 GMT+1
。4小时后(
16:00 GMT+1、18:00 GMT+3、15:00 GMT+0
),无论您的时区如何更改,服务器仍会通知您。由于服务器将把您的约会保存为GMT+0,并且如果某人的约会到期,服务器将每隔5分钟用
CRON
作业检查一次


另一方面,如果要在客户机上执行检查,则应始终将客户机的日期时间转换为服务器上保存的任何格式,并与服务器进行检查。

数据库中的时间应保存为UTC。然后,您可以有额外的列和偏移量。然后,您可以选择以UTC或用户时区(偏移量)获取时间。这样,您只需要更新数据库中用户的偏移量。一些例子:我已经有了用户的时区。如果他移动到其他时区,我也会更新时区。如果所有日期都存储为UTC,那么请检查我发布到的链接。您不知道这里有什么问题。考虑这个例子,用户的提醒时间是IST中的早上8点(+5:30),我在UTC中存储2:30到数据库中。如果他移动到EDT(-4:00)时区,我将把存储的时间(2:30)转换成用户的新时区(-4:00),我将得到前一天的10:30。这是不正确的。应该是早上8点,而不是前一天的晚上10:30。别忘了我正在使用CRON作业发送通知。我想你不明白我的意思:如果用户希望在上午8点(无论时区如何)收到通知,请在数据库中存储上午8点UTC。然后,在执行查询时,将存储的通知日期(转换为用户时区)与当前本地时间(在用户时区中)进行比较。这样,它将始终在用户本地时区的上午8点通知您。CRON正在检查当前GMT时间,并使用MySQL查询与用户提醒时间匹配。这个通知还通过从MySQL关系数据库获取数据来包含用户的一些信息。问题在于现有用户数据。A国的情况仍然如此,我们有大量的用户数据。如果我执行MySQL连接操作或其他一些需要用户时间的条件,那么我们总是会得到错误的结果。