如何将 UTC 日期时间转换为另一个时区?

问题描述 投票:0回答:5

如何将这样的日期转换:

2012-07-16 01:00:00 +00
(位于
UTC +00:00
时区)到
UTC +04:00
时区?确保正确处理夏令时?

php datetime timezone
5个回答
57
投票

使用

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 

1
投票

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 起就可以使用这种新的构造函数。


0
投票

为了帮助解决这个问题,您需要获取字符串的最后一部分(偏移部分)并通过简单的查找来查找它。您可以使用正则表达式或

substr()
(也许)来获取最offest 部分。然后,当您有 + 或 - 值时,最多对可能的时区使用 24 次查找,您可以将其与 PHP 的可能的 timezones 一起使用 - 如果偏移量相同,谁在乎实际的国家/地区是什么?

使用 date_default_timezone_set 应用正确的时间。


0
投票

如果您的日期时间字符串不包含时区信息,例如

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

-3
投票

您也可以使用 GMT 时间,然后将其转换为您的要求

<?php
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
?>

GMT 指格林威治标准时间,全世界通用。

© www.soinside.com 2019 - 2024. All rights reserved.