PHP 显示存储的时间数据,并在考虑不同时区的同时存储时间数据


PHP displaying stored time data, and storing time data while accounting for different timezones

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

存储时间

第一步是使用 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 偏移量,因此我需要使用 $timezone 将 UTC 时间的$list['stamp']转换为用户时区。我为此使用什么功能?

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