在PHP中转换日期格式(但这是什么格式?)

4

我正在使用Envato API验证在其网站上进行的购买,并作为API查询的一部分输出的日期/时间格式如下:

Wed May 20 06:37:57 +1000 2015

首先,这是什么格式(有没有名称,还是PHP日期/时间格式?),其次我如何将其转换为不同的格式?
当我使用strtotime()函数然后像下面这样使用date()时,输出似乎错了几个小时。这是因为Envato(澳大利亚)和我(英格兰)之间的时区差异还是我漏掉了什么?
$old = strtotime("Wed May 20 06:37:57 +1000 2015");
echo date('Y-m-d H:i:s', $old);

上面的代码输出如下:2015-05-19 22:37:57
非常感谢您的帮助,谢谢!

2
我不确定,但我感觉你可以直接从日期格式创建一个新的日期对象。然后按你想要的格式打印它。也许像这样?http://sandbox.onlinephpfunctions.com/code/0a1d2686d74801eb4422f5845277c3ee1d444925(输出:2015-05-20 06:37:57)。无论如何,问题提得很好,+1。请注意,如果更改时区,则会对每个日期进行更改。而如果您创建一个datetime对象,它将在该特定日期上正常工作。 - briosheje
1
不要只是交叉手指,希望 strtotime 神奇地找出格式,你应该听取 briosheje 的建议 - 使用 DateTime::createFromFormat(...) 并明确指定输入格式。作为奖励,您将获得一个完整的、时区感知的日期对象来处理,而不仅仅是一个时间戳。 - DCoder
1
关于您看到的时间变化,您的输入包含+1000,这是“GMT+10小时”的时区指定符号,strtotime将其解析为这样。 - DCoder
太好了,谢谢@DCoder!如果我想告诉PHP这是在ACT,然后将其切换到GMT,我该如何在对象内部处理,以便不会影响所有其他日期?@briosheje - Sam B.
2
$old->setTimezone(new DateTimeZone('Europe/London'));,然后是echo $old->format('Y-m-d H:i:s');。这在文档中有说明。 - DCoder
显示剩余4条评论
2个回答

3

这应该可以工作:

$date="Wed May 20 06:37:57 +1000 2015";
$datetime = DateTime::createFromFormat('D F d H:i:s O Y',$date);
echo $datetime->format('Y-m-d H:i:s');

如果您想将其转换为英国时区:

$datetime->setTimezone(new DateTimezone('Europe/London'));
echo "Queen's datetime: ".$datetime->format('Y-m-d H:i:s')

很棒的东西,简单明了 - 谢谢! - Sam B.
那么我们不需要告诉 PHP 原始的日期/时间是在 ACT 时区吗? - Sam B.
2
这是格式字符串中的“O”和原始日期中的“+1000”。 - n00dl3
太好了,非常感谢! - Sam B.

2

试试这个

date_default_timezone_set('Australia/ACT');
$old = strtotime("Wed May 20 06:37:57 +1000 2015");
echo date('Y-m-d H:i:s', $old);

谢谢,那么为了澄清,这将保留时区,以便所有内容都是澳大利亚时间?如果我想将其转换为GMT/英国时间,我只需省略该行代码(这就是之前发生的情况)? - Sam B.
如果您想将时间转换为GMT/英国时间,请更改timezone_set。因此,时间将转换为英国时间。好的选择是将日期时间和时区插入数据库或将一个时区设置为所有设置的默认值。 - Alghi Fari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接