我创建这篇文章是为了确认我正确理解了该过程,并获得有关解决为不同时区的用户正确显示和存储发布时间问题的一些小细节的反馈。
存储时间
第一步是使用 JavaScript 函数以 GMT 偏移格式获取用户时区,并将其存储在 session 变量中。例如,$timezone 变量将存储 GMT -4
$timezone=$_SESSION['time'];
下一步,一旦我有了我的用户时区。当用户发帖时,我将帖子时间存储在 mysql 数据库中,我需要将其存储为 UTC 格式。我该怎么做呢?目前当我存储时间数据时。是通过以下方式。我的邮票字段是日期时间格式,如果可能的话我想保留它。
INSERT INTO posts (stamp) VALUES (now())
我应该使用什么函数而不是 now() 来获取 UTC 格式,然后将其插入到我的数据库中?我假设我需要使用一个 php 函数,该函数将使用 $timezone 来生成 UTC 日期。
显示时间
接下来,将 UTC 日期存储在数据库中。我需要根据我们设置的 $timezone 变量向用户显示数据。
所以当我显示时间时,我当前这样做
echo date('F d', strtotime($list1['stamp']));
一旦我将数据存储为 UTC 时间,这将显示 UTC 时间,但我需要向用户显示其时区的 UTC 偏移量,因此我需要转换 $list['stamp']
以 UTC 时间转换为使用 $timezone 的用户时区。我为此使用什么功能?
tl:博士 这应该是我完成这项工作所需的全部内容。如果您看到任何建议或我没有考虑到的项目,请告诉我,如果您知道我需要使用哪些函数将时间转换为 UTC 以存储在数据库中,以及使用什么函数来转换 UTC 时间使用 $timezone 变量显示用户。
最佳答案
将 UTC 时间插入数据库:
INSERT INTO posts (stamp) VALUES (UTC_DATE())
更新:这只会将 YYYY-MM-DD 插入到您的数据库中。如果您也需要时间,请使用:
INSERT INTO posts (stamp) VALUES (UTC_TIMESTAMP())
然后根据时区打印日期:
$date = date_create($list1['stamp'], timezone_open($timezone)); //$timezone='Pacific/Nauru';
echo date_format($date, 'F d');
这应该可以帮助您入门。了解有关 PHP 的更多信息 DateTime Class用于面向对象的方法,以及一般的更简洁的编程。
关于PHP显示存储的时间数据,并在考虑不同时区的同时存储时间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568957/