我收到以下错误:
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存储。
答案 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');