使用strtotime时加两个小时


Add two hours when using strtotime

当我进行转换时

$date = '09/20/2012 02:00';
echo $stamp = strtotime($date);

给了我1348099200,但当我通过网站在线转换时,它会显示2小时前的时间。

如何添加2小时?

strtotime函数总是相对于now(),后者相对于一个名为时区的php.ini设置(实际上是:date.timezone,请参阅下面的链接)。

所以你应该说你的服务器(或网站)位于哪个时区,配置它,你不需要添加这两个小时。如果夏令时发生变化,这两个小时甚至可能会发生变化,所以不要将其硬编码到应用程序中。

  • date_default_timezone_set­文档
  • date.timezone字符串­文档

(假设:希腊现在UTC+2,但现在是夏天)

date_default_timezone_set('Europe/London');
$date = new DateTime('09/20/2012 02:00');
$date->modify('+2 hour');
echo date_format($date, 'Y-m-d h:i');

试试这个,它会工作

$date1 = '09/20/2012 02:00'; echo $stamp = strtotime("+2 hours",strtotime($date1)); echo date('Y-m-d h:i', $stamp);

您使用哪个时区作为默认时区,在线工具使用哪个时区?我猜在线工具的TZ是GMT(UTC),而您的是GMT+2,这可以解释差异。

我建议您明确设置TZ,或者使用基于GMT的时间戳来避免这种类型的歧义。这样,您就可以始终确定您使用的是什么基准,TZ转换也很简单。

例如:

$ts = new DateTime('09/20/2012 02:00', new DateTimeZone('America/Lima'));
$ts->setTimeZone(new DateTimeZone('Asia/Tokyo'));
echo $ts->format('Y-m-d H:i:sP') . "'n";

上面的代码输出:

2012-09-20 16:00:00+09:00

HTH