用于 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 日期和时间工具的主要内容,如果未能解决你的问题,请参考以下文章
使用时区偏移量而不是时区标识符将 GMT 时间转换为本地时间