2016-03-03 98 views
1

我正在計算比較上週和前一年同一天的每週值。由於我們剛剛閏年,我的方法會導致問題。PHP日期:在閏年內計算日期的問題

我計算這樣的日期,並進行相應的選擇:

$today_raw = date('Y-m-d'); 
$yearAgo = date('Y-m-d', strtotime('-1 year', strtotime($today_raw))); 
$weekAgo = date('Y-m-d', strtotime('-6 day', strtotime($today_raw))); 
$weekYearAgo = date('Y-m-d', strtotime('-1 year', strtotime($weekAgo))); 

$stmt_currentWeek = $pdo->prepare("SELECT X FROM Y WHERE Z BETWEEN '$weekAgo' AND '$today'"); 
$stmt_weekLastYear = $pdo->prepare("SELECT X FROM Y WHERE Z BETWEEN '$weekYearAgo' AND '$yearAgo'"); 

很明顯的是,SELECT返回錯誤值的數量爲$weekYearAgo是完全錯誤的,因爲它沒有反映閏年的差異。

我在做什麼錯?

+3

爲什麼不使用PHP中的dateTime對象?它應該可以解決你的問題 – RFLdev

+2

你的數據庫中的時間戳與你的'php.ini'中的日期設置是否在同一時區?如果不是,那麼在將它發送到數據庫之前,需要符合php日期。 – Daniel

+1

爲什麼不使用SQL內置的日期函數?他們應該處理這些事情。類似於NOW() - INTERVAL 1 YEAR' – apokryfos

回答

2

只需使用mysql日期函數:

$stmt_currentWeek = $pdo->prepare("SELECT X FROM Y WHERE Z >= DATE_SUB(NOW(), INTERVAL 1 WEEK)"); 
$stmt_weekLastYear = $pdo->prepare("SELECT X FROM Y WHERE Z BETWEEN DATE_SUB(DATE_SUB(NOW(), INTERVAL 1 YEAR), INTERVAL 1 WEEK) AND DATE_SUB(NOW(), INTERVAL 1 YEAR)"); 

1年零1個星期前:AGO

DATE_SUB(DATE_SUB(NOW(), INTERVAL 1 YEAR), INTERVAL 1 WEEK) 

1年:

DATE_SUB(NOW(), INTERVAL 1 YEAR) 

1個星期前:

DATE_SUB(NOW(), INTERVAL 1 WEEK) 

在你不需要的第一個SQL之間1周WAGO和現在你可以重寫它> = 1 WEEK AGO

+0

@AntonSack不客氣! – Kordi