我有一个社交网站,我已经在PHP / MySQL上工作了几年,我现在再次从头开始重新建立整个网站。这一次,我真的想添加用户在我的网站上设置时区的能力。
所以说到这一点,我要求指导从开始到完成我需要包括的步骤来做到这一点。我的旧网站使用mysql datetime来表示所有日期和时间,它工作得很好,但我读到最好像文本一样使用并存储所有日期和时间与UTC,有人可以解释我怎么做到这一点?我是否仍然可以在php中使用now()函数来节省mysql的时间?
此外,我已经看到了php可以生成所有时区的列表,它显示的内容就像一百万(不是真的),但我想知道,是否可以显示某种带有图像的地图链接到主时区?
请设置用户时区的任何提示,我可以做那个部分,但是一旦我保存了用户的时区并准备好使用,我怎样才能确保用户看到正确的时间以及如何在正确的时间。
很抱歉,如果这令人困惑,任何帮助都会很棒,谢谢。
答案 0 :(得分:2)
此主题变得复杂,尤其是当您考虑夏令时以及您的服务器与某些成员处于不同时区的事实时。
我建议你看看那些为解决这些问题而构建的库。 PEAR包裹日期可能是一个好的起点。 http://pear.php.net/package/Date
基本上,您希望您的会员为其个人资料选择时区。然后将所有时间转换为UTC(以删除服务器位置的偏移量)并将它们作为时间戳存储在数据库中。显示时间时,应用成员为自己选择的时区偏移量(可能使用UTC作为默认值)以及日期显示格式。
答案 1 :(得分:2)
使用php时,根据我的经验,最好将使用time()
生成的时间戳存储为数据库中的int。虽然在查看数据库时可能不那么容易阅读它们(因为你无法从数字中猜出实际日期),但是在php中处理日期时,时间戳是最本土的。
要保存每个用户的时区,您可以在几小时内或更好地保存偏移量(因为某些时区可以休息半小时),只需几分钟。例如,我的时区偏移量为+60
(UTC + 1),而在美国,大多数时间偏移量为-480
(UTC-8)或类似值。
然后在显示用户的时间时,您只需选择时间戳(以UTC时间为单位)和时区偏移量,并使用标准date()
函数生成可读日期。
例如:
<?php
$time = time(); // from database or time() for "now"
$offset = -480; // from database
// add the offset to the time you want to display and you have the user's time
echo date( 'd.m.Y H:i', $time + $offset * 60 );
?>
此外,您还可以将格式化字符串(d.m.Y H:i
)存储在数据库中,以便每个用户都可以选择自己喜欢的格式。