1

我想要做的是用 strtotime 转换一个时间字符串,然后用它以前的时区返回日期。

我正在使用以下代码,但我得到的时间是 UTC:

$timeStart = "2013-04-25 18:14:00+03";
$datetimeStart = strtotime($timeStart);
$datetimeNext = strtotime('+8 hours',$datetimeStart);
$time = gmdate('Y-m-d\\TH:i:s\\Z', $datetimeNext);

有任何想法吗?谢谢..

4

3 回答 3

1

我认为您的意思是您想要与原来相同的偏移量。阅读TimeZone 标签 wiki中的“TimeZone != Offset” 。

您的请求的主要问题是strtotime(根据docs )返回一个整数,表示从UTC纪元开始的秒数。因此,您提供的任何偏移量都将被考虑在内,但随后被遗忘。

抱歉,我不太了解 PHP,无法提供代码示例,但您可能可以从原始字符串中提取偏移量,然后在最后重新应用它。也有可能有一种不同的方法来解析字符串,这将产生一个保持偏移量的对象。同样,我对 PHP 的了解还不够,无法在这里为您提供帮助。在 .Net 中,同样的问题可以通过解析为 aDateTimeOffset而不是 a来解决DateTime

另外-从逻辑上讲,您开始使用的偏移量不一定是添加时间后要使用的正确偏移量。您可能已经过了夏令时转换,这将使新的正确偏移量比原始偏移量少一个小时或多一个小时。您可能关心也可能不关心,这取决于您的担忧。编辑后纠正偏移的唯一方法是还知道原始值所在的时区。

于 2013-04-25T20:59:29.567 回答
1

你应该使用date而不是gmdate

$time = date('Y-m-d\\TH:i:s\\Z', $datetimeNext);
于 2013-04-25T15:41:42.077 回答
0

在进行 strtotime 转换之前,尝试使用 putenv 设置您的时区。

http://php.net/manual/en/function.putenv.php

putenv("TZ=US/Central");
$today = date('F j, Y, g:i a');
$newdate = strtotime ($today) ;
$newdate = date ( 'F j, Y' , $newdate );
于 2013-04-25T15:44:05.360 回答