根据用户处理PHP时区

时间:2012-09-04 04:41:34

标签: php mysql datetime

嗯,我知道这个问题可能会被问到很多次,但我当然很少有疑问在我的脑海中,顺便说一下,不要评论我尝试过的东西,我尝试了很多方法,但我只想问什么是正确和简单的方式,因为有很多帖子在这里挥之不去,提出了完成这些任务的不同建议,所以我将explode()我的问题转化为较小的问题......

所以你们可以指导我在哪里出错或肯定很多人在日期/时间方面感到困惑

1)为什么/如何使用PHP在MySQL中节省UTC时间? 就个人而言,我使用php $year/$month/$day发布此内容,并使用mysql日期字段中的checkdate()检查日期。所以它可以或者我应该使用timestamp而不是使用php在前端爆炸检索到的字符串?

2)如果我从印度运行服务器,我应该使用date_default_timezone_set("Asia/Calcutta");记录默认时间,而不是使用php功能减去和添加时间,或者仅在发布时我应该检查用户时区中选择的用户时区并相应地设置条件有点:

if(timezoneselected == +5.30) {
echo date_default_timezone_set("Asia/Calcutta");
} elseif(timezoneselected == +anytime) {
echo another country timezone
}

3)最后一个问题是gmail facebook等网站如何管理时间?我的意思是,如果他们根据他们的服务器保存日期时间,而不是他们为每个用户显示完美的发布时间,甚至gmail,如果我向另一个用户发送邮件,我发送的时间和生活在另一个国家的人在他的打印本地获取电子邮件时间我的意思是我们如何做到这一点,对不起,我无法完全解释你这个例子,

Facebook的: 来自印度的用户帖子,脸谱显示8分钟前发布,9分钟前,很久以后他们显示真实日期,并且根据我发布的时间该日期是完美的,但是如果一个人来自美国更新,比如说8分钟前9分钟前在他的个人资料上,但他的原始发布时间是正确显示给他的,甚至对我来说是正确的?

对不起这个问题,但这确实有助于我理解这个日期/时间概念,对未来的用户也有帮助。谢谢!

2 个答案:

答案 0 :(得分:4)

最重要的是,您应存储所有UTC

当您显示特定用户的时间时,请使用他们选择的时区。存储用户的时区,例如“Asia / Calcutta”,只需使用date_default_timezone_set方法转换显示时间。

我将尝试通过此处的评论回答您的问题。

您始终存储所有UTC。这是基线。当您根据用户显示与您转换的任何内容相关联的时间时。如果您想显示已发布8分钟前,那么您将获取当前UTC时间与与帖子相关联的UTC时间之间的增量。如果您从用户A(在印度)向用户B(在洛杉矶,美国)发送消息,那么您将以UTC格式存储消息时间。如果用户A正在查看它,则时间将转换为“亚洲/加尔各答”,如果用户B正在查看它,则时间将转换为“America / Los_Angeles”。使用UTC将使您的生活更轻松。相信我。

答案 1 :(得分:1)

MySQL Server Time Zone Support中所述:

  

当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括NOW()CURTIME()等函数显示的值,以及TIMESTAMP列中存储和检索的值。 TIMESTAMP列的值将从当前时区转换为UTC以进行存储,并从UTC转换为当前时区以进行检索。

因此,如果您使用TIMESTAMP类型列,MySQL将自动为您处理时区转换:只需在其time_zone变量中为会话设置适当的时区。