2014-06-07 22 views
0

我得到以下錯誤:

PHP Fatal error: Call to a member function format() on a non-object

代碼:

$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中「日期」字段中的數據類型的文件表「時間戳「,其值是MySQL創建時默認存儲的」CURRENT_TIMESTAMP「。

+0

檢查'$ date1'的類型。 –

+0

@OliCharlesworth你能解釋更多嗎?我是PHP新手。 –

+0

'var_dump($ date1);'。 –

回答

1

此代碼得到優6個月前從現在開始:

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

編輯:

,並使用日期時間:

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

如果OP使用DateTime對象,則暗示它們退化爲使用基本日期函數並不是真正解決其問題的最佳答案 –

+0

爲我工作得很好。 –

0

試試下面的代碼:

<?php 
$date = new DateTime('-6 months'); 
echo $date2 = $date->format('Y-m-d'); 
?> 
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(); 
0

您似乎在使用PHP的過時的版本。

從php 5.3+開始DateTime::modify返回datetime對象被調用之前,null被返回。

您不需要將修改結果分配給新變量,因爲它修改當前對象並且不會返回新對象。

爲了使它在5.2工作:

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

var_dump($dateS); 

你應該然而,升級你的PHP到支持的版本。

PHP 5。4+ short-example:

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