0

我正在创建这篇文章,以确认我正确理解了该过程,并获得有关解决为不同时区的用户正确显示和存储发布时间问题的一些小细节的反馈。

存储时间

第一步是使用 javascript 函数将用户时区作为 GMT 偏移格式,并将其存储在会话变量中。例如,$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']使用 $timezone 将 UTC 时间转换为用户时区。我为此使用什么功能?

tl:dr 这应该是我完成这项工作所需的全部内容。如果您看到任何建议或我没有考虑的项目,请告诉我,如果您知道我需要使用哪些函数将时间转换为 UTC 以存储在数据库中,以及使用什么函数来转换 UTC 时间显示用户,使用 $timezone 变量。

4

1 回答 1

1

将 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 类,以及更简洁的编程。

于 2012-05-13T03:03:33.730 回答