3

好吧,我知道这个问题可能会被问很多次,但我肯定没有什么疑问在我看来,顺便说一句,不要评论我尝试过的方法,我尝试过很多方法,但我只是问什么是正确的和更简单的方法,因为这里有很多帖子,对完成这些任务有不同的建议,所以我将explode()我的问题变成更小的问题......

所以你们能不能指导我在哪里是对还是错,因为我相信很多人在谈到日期/时间时会感到困惑

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

2)如果我从印度运行服务器,我应该使用 php 函数记录默认时间,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:来自印度的用户发帖,facebook 节目在 8 分钟前,9 分钟前发布,过了一段时间他们显示了一个真实的日期,根据我发布的时间,这个日期是完美的,但是如果来自美国的人更新,比如 8 分钟前9 分钟前在他的个人资料上,但他的原始发布时间对他正确显示,甚至对我正确显示?

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

4

2 回答 2

4

底线,你应该存储所有UTC

当您显示特定用户的时间时,请使用他们选择的时区。date_default_timezone_set存储用户的时区,如“亚洲/加尔各答”,并在使用该方法显示时简单地转换时间。

我将尝试从这里的评论中回答您的问题。

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

于 2012-09-04T04:50:18.567 回答
1

MySQL 服务器时区支持中所述:

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

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

于 2012-09-04T04:42:53.587 回答