用于 GMT 偏移的 php 日期和时间工具

Posted

技术标签:

【中文标题】用于 GMT 偏移的 php 日期和时间工具【英文标题】:Which php date and time tools to use for GMT offsetting 【发布时间】:2010-11-04 04:16:48 【问题描述】:

似乎有很多方法可以在 php 中处理日期和时间按摩。我通常只处理当地时间。今天,我需要在 UTC 工作。

我正在查询一个 API,他们给我的关于任意记录的数据是: 创建时间:2009 年 6 月 18 日星期四 21:44:49 +0000 * 记录为“UTC 记录创建时间”

utc_offset:-28800 * 用户之间的差异重新

我需要将其转换为一个简单的字符串,以向用户显示数据在其本地时间提交的时间和日期。

我相信,如果在加利福尼亚州,以上内容可以转化为: 2009 年 6 月 18 日星期四 02:44:49 PM

我的目标是获得一个可以传递给 date() 的时间值,以便以“漂亮”格式轻松格式化。

真的就像将上面创建的时间从纪元转换为秒,添加偏移量,然后将其传递给 date() 一样简单吗?有什么需要注意的哥特茶吗?

$created_time = 'Thu, 18 Jun 2009 21:44:49 +0000';
$utc_offset = -28800;
$seconds = strtotime($created_time);
$localized_time = $seconds + $utc_offset;

echo date(DATE_RFC822, $localized_time);

谢谢

【问题讨论】:

【参考方案1】:

PHP 应该自动为您做事。我也强烈推荐使用 DateTime 对象。

$dt = new DateTime($created_time); echo $dt->格式(DATE_RFC2822);

PHP 的日期和时间函数可以识别时区。确保您使用的是最新版本的 PHP,因为在改进这些系统方面已经做了大量工作。

【讨论】:

谢谢。 DateTime 对象手册非常深入,我会复习。我仍然追求的是如何正确处理偏移量。从文档中,我得到了 $created_time 的 UTC 值。我得到的唯一其他日期/时间值是偏移量。用户数据来自世界各地,偏移量将根据他们所在的区域而有所不同。我假设我只是将对象移动到秒,添加偏移量,然后将其转换为漂亮的字符串? 这个想法是同时使用DateTime和strtotime,如果您以标准格式指定时区,它将拾取并自动转换为您自己指定的时区。另一种方式(参见第二个评论者)是临时更改默认时区,或者给 DateTime 对象一个 DateTimeZone 对象【参考方案2】:

您可以使用date_default_timezone_set 在时区之间切换。在您的情况下,您将从用户的个人资料中传递时区信息。按照 Evert 的建议,如果您使用的是 PHP 5>=5.2,请使用更高级的 DateTime 类。

<?php
echo date('h:i:s')."\n";
date_default_timezone_set('Europe/Paris');
echo date('h:i:s')."\n";
date_Default_timezone_set('UTC');
echo date('h:i:s')."\n";

【讨论】:

谢谢。我只得到一个偏移量,我得到的时区数据没有以 php 的“支持的时区列表”的方式格式化。我宁愿不处理这些数据,然后冒险改变它。您如何看待偏移量并将其映射到“date_default_timezone_set()”接受的每个值?或者,是否有一个我缺少的功能已经做到了? 如果您有偏移量,只需将其转换为小时并使用此处的时区之一:us2.php.net/manual/en/timezones.others.php。在您的示例中 $utc_offset = -28800;将是 (-28800 / 3600) = -8 所以 'Etc/GMT-8' 是你想要的。

以上是关于用于 GMT 偏移的 php 日期和时间工具的主要内容,如果未能解决你的问题,请参考以下文章

php时间偏移mysql实时

使用偏移量计算 JavaScript 日期时间

使用时区偏移量而不是时区标识符将 GMT 时间转换为本地时间

如何实现“tzinfo”以将当前 GMT 偏移到 EST(GMT -4:00)?

在 gmt 中生成日期的所有分钟并获取其本地值

Java日期和时间