如何将这样的日期转换:
2012-07-16 01:00:00 +00
(位于UTC +00:00
时区)到UTC +04:00
时区?确保正确处理夏令时?
DateTime
和 DateTimeZone
。
$date = new DateTime('2012-07-16 01:00:00 +00');
$date->setTimezone(new DateTimeZone('Europe/Moscow')); // +04
echo $date->format('Y-m-d H:i:s'); // 2012-07-15 05:00:00
DateTimeZone
构造函数可以显式接受UTC偏移量,我知道你有。
//So For 'Asia/Kolkata' you need to use
$timeZone = new DateTimeZone('+0530');
// Example
$utc = new DateTime("1960-08-08T20:40:00Z");
echo $utc->format('Y-m-d H:i:s T')."<br>";
$tz =new DateTimeZone('+0530');
$utc->setTimezone($tz);
echo $utc->format('Y-m-d H:i:s T');
输出: 1960-08-08 20:40:00 Z 1960-08-09 02:10:00 GMT+0530
我想这是将时间转换为任何给定偏移量的最简单方法
文档:
http://php.net/manual/en/datetimezone.construct.php
注意:根据该文档链接,自 PHP 版本 5.5.10 起就可以使用这种新的构造函数。
为了帮助解决这个问题,您需要获取字符串的最后一部分(偏移部分)并通过简单的查找来查找它。您可以使用正则表达式或
substr()
(也许)来获取最offest 部分。然后,当您有 + 或 - 值时,最多对可能的时区使用 24 次查找,您可以将其与 PHP 的可能的 timezones 一起使用 - 如果偏移量相同,谁在乎实际的国家/地区是什么?
使用 date_default_timezone_set 应用正确的时间。
如果您的日期时间字符串不包含时区信息,例如
2024-06-06 06:52:32
,可以使用此方法:
$sd = "2024-06-06 06:52:32";
$dt = new DateTime($sd, new DateTimeZone('UTC'));
$dt->setTimezone(new DateTimeZone("Europe/Moscow"));
echo $sd . ' -> ' . $dt->format("Y-m-d H:i:s") . "\n";
结果:
2024-06-06 06:52:32 -> 2024-06-06 09:52:32
您也可以使用 GMT 时间,然后将其转换为您的要求
<?php
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
?>
GMT 指格林威治标准时间,全世界通用。