【问题标题】:PHP Date to strtotime and back to date?PHP日期到strtotime并返回日期?
【发布时间】:2013-04-19 14:29:42
【问题描述】:

我想要做的是用 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);

有什么想法吗?谢谢。。

【问题讨论】:

  • 你从哪个变量得到的时间?
  • 最后一个... $time

标签: php timezone strtotime


【解决方案1】:

我认为你的意思是你想要和原来一样的 offset。阅读the TimeZone tag wiki 中的“TimeZone != Offset”。

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

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

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

【讨论】:

  • 谢谢..这对我帮助很大..我没想到夏令时转换!
【解决方案2】:

您应该使用date 而不是gmdate

$time = date('Y-m-d\\TH:i:s\\Z', $datetimeNext);

【讨论】:

  • 结果是2013-04-25T23:14:00Z,还是UTC??
【解决方案3】:

在进行 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 );

【讨论】:

  • 问题是我不知道时区..这取决于 $timeStart 有什么时区..我从数据库获得 $ timestart 并且时区可能每次都不同..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多