PHP 日期:在闰年内计算日期的问题


PHP date: Issue with calculating date within leap year

我正在计算每周值,比较上周和前一年的同一天。由于我们只有一个闰年,我的方法会引起问题。

我正在计算这样的日期并执行相应的选择:

$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 周前