我正在计算每周值,比较上周和前一年的同一天。由于我们只有一个闰年,我的方法会引起问题。
我正在计算这样的日期并执行相应的选择:
$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
是错误的,因为它没有反映闰年的差异。
我做错了什么?
只需使用 mysql DATE 函数:
$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 周前:
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 周前和现在之间,您可以将其重写为>= 1 周前