Php 修改日期时间对象

Php 修改日期时间对象,php,datetime,Php,Datetime,我创建一个对象 $date = new DateTime(); 它被设置为当前日期2011-04-01 21:43:40。我尝试以下方法 $date->modify('midnight'); 我希望对象设置为2011-04-01 00:00:00。但什么也没发生。对象未被修改,并继续具有2011-04-01 21:43:40日期。我只想将时间重置为午夜(00:00:oo)。有几个问题,也许有助于说明问题 php.ini文件中是否设置了时区 创建新的DateTime()对象后,是否使用v

我创建一个对象

$date = new DateTime();
它被设置为当前日期2011-04-01 21:43:40。我尝试以下方法

$date->modify('midnight');

我希望对象设置为2011-04-01 00:00:00。但什么也没发生。对象未被修改,并继续具有2011-04-01 21:43:40日期。我只想将时间重置为午夜(00:00:oo)。

有几个问题,也许有助于说明问题

php.ini文件中是否设置了时区

创建新的DateTime()对象后,是否使用var_dump()或其他函数查看其参数并获取设置的日期

您是否尝试并成功地将其他日期和时间格式传递到修改方法中?

如果没有date.timezone设置,此代码(带午夜)将无法工作


更新:这段代码需要PHP5.3.6才能正常工作。在以前的版本中,
DateTime::modify('midnight')
不起作用

原则检查
DateTime
对象是否更改了其引用。 修改一个对象不会改变引用,所以对于条令来说,这不是一个改变。 改用
new\DateTime('midnight')

我也遇到了同样的问题! 但是返回的日期是正确的,因此我所做的是:

@$date->modify('midnight');
解决使用

$date = new DateTime(date('Y-m-d H:i:s', strtotime('today midnight')));
echo $date->format('Y-m-d H:i:s');

php.ini中未设置时区。我创建了DateTime()对象,比如$date=newdatetime();我使用Crumo查看$date对象(Drupal、Devel模块)。以下$date->modify(“+5天”);很好。问题是当试图修改时间时,nod date。偶数$date->modify('11:00');不起作用。嗯,我在codepad.org上做了一个快速检查,在我看来时间也不会改变我尝试的任何东西。奇怪。我会尝试在php.ini中设置一个默认时区,特别是当时间修改不起作用,但day mods起作用时。如果你在php.ini中没有设置时区,你应该在代码中得到一个大的警告。请确保您在开发时启用了错误报告和显示错误:
ini\u集('display\u errors',true);错误报告(-1)它没有帮助。我在php.ini中设置了默认时区,但没有任何更改。您重新启动了apache或php吗?是否已打开所有错误报告?是。当然PHPinfo()显示当前时区集。DateTime::getTimezone还显示正确的时区。但是DateTime::modify仍然不适用于时间(今天,午夜),只适用于日期。但是它使用$date->modify(“+12小时”);好啊这很奇怪。嗯,我在最新的5.3.3上测试过,它也不起作用。但我安装了5.3.6,它可以正常工作。请更新您的PHP。以防其他人在PHP5.3.6之前遇到此问题。一种解决方法是这样做:
$date=date\u create()->格式('Y-m-d 00:00:00')因为
$date->modify('midnight')未按预期运行。请详细解释。你的回答喜欢评论,而不是回答!