我想要做的是将时间字符串转换为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);
有什么想法吗?谢谢..
答案 0 :(得分:1)
您应该使用date
代替gmdate
$time = date('Y-m-d\\TH:i:s\\Z', $datetimeNext);
答案 1 :(得分:1)
我认为你的意思是你想要和原来一样的偏移。请阅读the TimeZone tag wiki中的“TimeZone!= Offset”。
您的请求的主要问题是strtotime
(根据the docs)返回一个整数,表示UTC中纪元的秒数。因此,您提供的任何偏移都将被考虑在内,但后来被遗忘。
抱歉,我不太了解PHP以提供代码示例,但您可以从原始字符串中提取偏移量,然后在最后重新应用它。也有可能有一种不同的方法来解析将产生维持偏移量的对象的字符串。再一次,我不太了解PHP,可以帮助你。在.Net中,通过解析为DateTimeOffset
而不是DateTime
,可以解决同样的问题。
另外 - 从逻辑上讲,开始时的偏移量不一定是添加时间后使用的正确偏移量。您可能已经越过夏令时转换,这将使新的正确偏移比原始偏移少一个小时或一个小时。您可能会或可能不会关心这一点,具体取决于您的顾虑。在编辑之后获得校正偏移的唯一方法是知道原始值所在的时区。
答案 2 :(得分:0)
尝试使用putenv在进行strtotime转换之前设置时区。
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 );