date()和DateTime::format()的输出不同,DateTime:

  • 本文关键字:DateTime 输出 format date php date
  • 更新时间 :
  • 英文 :


我在php.ini中将PHP的时区设置为"欧洲/柏林",应该是+1到UTC(在冬天(。

当我使用date()向用户(使用Apache和浏览器(输出Unix时间戳(UTC(时,时区使用正确。当我使用DateTime::format()输出相同的时间戳时,没有应用时区,直到我用DateTime::setTimezone()显式设置它。

请参阅以下示例代码:

<?php
$now = time();
// Verify Timezone
$tz = ini_get('date.timezone');
echo 'Timezone: ' . $tz  . '<br>';
// Using date
echo 'date(): ' . date('Y-m-d H:i:s', $now) . '<br>';
// Using DateTime
$dt = new DateTime('@' . $now);
echo 'DateTime1: ' . $dt->format('Y-m-d H:i:s') . '<br>';
// Setting DateTime timezone explicitly
$dt->setTimezone(new DateTimeZone('Europe/Berlin'));
echo 'DateTime2: ' . $dt->format('Y-m-d H:i:s') . '<br>';

输出:

Timezone: Europe/Berlin
date(): 2020-12-09 15:31:32
DateTime1: 2020-12-09 14:31:32
DateTime2: 2020-12-09 15:31:32

为什么?我在文档中看不到DateTime::format()默认忽略php.ini中设置的时区的任何提示。

正如@El_Vanja在评论中指出的那样,DateTime构造函数在由unix时间戳设置时忽略时区(请参阅文档(

::format()方法考虑在对象(=UTC(中设置的内容,而不是在php.ini中设置的。

最新更新