28

我怎样才能将这样的日期:(2012-07-16 01:00:00 +00它在UTC +00:00时区)转换UTC +04:00为时区?确保正确处理夏令时?

4

4 回答 4

56

使用DateTimeDateTimeZone

$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 
于 2012-08-09T12:54:40.987 回答
0

为了帮助解决问题,您需要获取字符串的最后一部分(偏移部分)并通过简单的查找进行查找。您可以使用正则表达式或substr()(也许)来获得最严重的部分。然后,当您有 + 或 - 值时,对可能的时区使用最多 24 次查找,您可以将其与 PHP 的可能时区一起使用- 如果偏移量相同,谁在乎实际的国家/位置是什么?

使用date_default_timezone_set应用正确的一个。

于 2012-08-09T12:55:01.250 回答
0

构造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 起可用。

于 2021-09-12T16:38:35.103 回答
-2

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

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

GMT 指的是全球通用的格林威治标准时间。

于 2014-08-22T09:41:07.560 回答