2014-02-12 56 views
0

我已經搜索並搜索了對此的答案,但我遇到的唯一例子是使用預設date('Y-m-d')命令的例子。時間間隔6個月,但用戶添加日期

我在我的數據庫中有三個字段 - 月,日,年。這些字段有一個人輸入的值,而不是計算機。現在,我如何弄清楚如何不顯示小於6個月的條目?

回答

1

轉換並投出您個人列進一個日期,然後把它比作今天...像這樣?

SELECT * 
FROM table 
WHERE cast(CONCAT(year, '-', month, '-', day) as datetime) >= NOW() - INTERVAL 6 MONTH 
+0

在檢查了所有其他的例子後,這個例子似乎對我最有意義,它工作。有點。唯一的問題是,它只顯示不到六個月的日期。將'>'切換到'<'顯示我的日期超過六個月 - 這正是我想要的。現在,我遇到了問題,沒有顯示年,月,日爲空的字段。我怎樣才能做到這一點? – skewbert

0

您仍然可以使用date函數...只需將其與mktime函數結合使用即可。

// DATE IN IDF 
// WILL RETURN 2013-08-12 
$date_less_6_months = date("Y-m-d", mktime(0, 0, 0, date("m") - 6, date("d"), date("Y"))); 

// DATE BROKEN APART 
$year_less_6_months = date("Y", mktime(0, 0, 0, date("m") - 6, date("d"), date("Y"))); 
$month_less_6_months = date("m", mktime(0, 0, 0, date("m") - 6, date("d"), date("Y"))); 
$date_less_6_months = date("d", mktime(0, 0, 0, date("m") - 6, date("d"), date("Y"))); 
0
$date_six_months_ago = date('Y-m-d', strtotime("-6 months")); 

現在你可以比較這些與你的數據庫值。 檢查所有日期格式的here

所以也許你想檢查年,月和日分開。 使用:

$day = date("d", strtotime($date_six_months_ago)); 
$month = date("m", strtotime($date_six_months_ago)); 
$year= date("Y", strtotime($date_six_months_ago)); 

也許你會需要格式化數據庫值,使用下面的SQL:

DATE_FORMAT(date,format) 
0

比方說,下面是從數據庫

$d = '02'; 
$m = '06'; 
$y = '2013'; 

現在免得看到從現在

$d1 = new DateTime($y.'-'.$m.'-'.$d); 
$d2 = new DateTime(date("Y-m-d")); 

$interval = $d2->diff($d1); 

$months = $interval->format('%m months'); 

的差別現在$個月內將包含在幾個月的差別

你可以請點擊這裏http://www.php.net/manual/en/class.dateinterval.php