【问题标题】:PHP displaying stored time data, and storing time data while accounting for different timezonesPHP显示存储的时间数据,并在考虑不同时区的同时存储时间数据
【发布时间】:2012-05-21 02:08:09
【问题描述】:

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

存储时间

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

tl:dr 这应该是我完成这项工作所需的全部内容。如果您看到任何建议或我没有考虑的项目,请告诉我显示用户,使用 $timezone 变量。

【问题讨论】:

  • 不是一个正确的答案,但我发现 DateTime 类及其 setTimezone 方法在过去非常有用。
  • 很酷,谢谢,我会调查的。

标签: php javascript jquery mysql datetime


【解决方案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 Class,以及更简洁的编程。

【讨论】:

  • 非常感谢。 timezone_open() 是否需要 $timezone='Pacific/Nauru' 或 $timezone='GMT -4' 如果前者,我如何将 GMT -4 转换为 'Pacific/Nauru' (即将偏移量转换为时区名称。)
  • 我认为你需要 mysql 函数 UTC_TIMESTAMP() 而不是 UTC_DATE()
  • 很酷,谢谢。我应该使用 UTC_TIMESTAMP 而不是 UTC_DATE 存储日期?这与 my_sql stamp 数据库字段为日期时间格式有关吗?
  • 我做了一些研究,发现一种将 GMT 偏移量转换为时区名称(例如“Pacific/Nauru”)的方法是使用 echo timezone_name_from_abbr("", 3600, 1) 。 "\n";功能。这行得通吗?
  • @arboles UTC_DATE 将使用 YYYY-MM-DD 格式,而 UTC_TIMESTAMP() 将使用 YYYY-MM-DD HH:MM:SS 格式。我有点不清楚你需要哪个,所以我会更新。
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 2015-05-06
  • 2020-09-15
相关资源
最近更新 更多