PHP $ date2 = $ date1->格式错误('Y-m-d')

时间:2014-06-07 09:40:19

标签: php mysql datetime

我收到以下错误:

  

PHP致命错误:在非对象上调用成员函数format()

代码:

$date = new DateTime();
$date1 = $date->modify('-6 months');
$date2 = $date1->format('Y-m-d');

我希望从现在开始6个月之前得到此日期,并删除数据库中早于此6个月日期的所有条目:

$query = $conn->prepare("DELETE FROM files WHERE files.date < ?");
$query->bind_param('s', $date2);
$query->execute();

在MySQL中,“date”字段位于数据类型为“timestamp”的文件表中,其值为“CURRENT_TIMESTAMP”,默认情况下由MySQL存储。

4 个答案:

答案 0 :(得分:1)

此代码从6月前开始提供给您:

date('Y-m-d', strtotime('now -6 month'))

编辑:

并使用DateTime:

echo (new DateTime('-6 months'))->format('Y-m-d');

答案 1 :(得分:0)

尝试以下代码:

<?php
$date = new DateTime('-6 months');
echo $date2 = $date->format('Y-m-d');
?>

答案 2 :(得分:0)

似乎是对

的呼吁
$date->modify('-6 months');

遇到错误并且不会返回DateTime个实例,但可能会false(请参阅documentation)。

您使用的是哪个PHP版本?我无法使用PHP 5.5.9上的给定示例重现该错误

也许你可以使用strtotime function

修改

我使用Wayback Machine from Internet Archive并发现旧版本的PHP(即5.1.0)返回NULL而不是DateTime对象:see for yourself。在这种情况下,您似乎直接在日期中应用修改,因此您需要将代码更改为

$date = new DateTime();
$date->modify('-6 months');
$dateString = $date->format('Y-m-d');

$query = $conn->prepare("DELETE FROM files WHERE files.date < ?");
$query->bind_param('s', $dateString);
$query->execute();

答案 3 :(得分:0)

看来你使用的是过时的php版本。

从php 5.3+ DateTime::modify开始,返回在返回null之前调用的datetime对象。

您无需将修改结果分配给新变量,因为它会修改当前对象而不会返回新变量。

使其适用于5.2:

<?php
$date = new DateTime();
$date->modify('-6 months');
$dateS = $date->format('Y-m-d');

var_dump($dateS);

但是,您应该将php更新为支持的版本。

PHP 5.4+简短示例:

$dateS = (new DateTime('-6 months'))->format('Y-m-d');