PHP日期:在闰年内计算日期的问题
问题描述:
我正在计算比较上周和前一年同一天的每周值。由于我们刚刚闰年,我的方法会导致问题。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
是完全错误的,因为它没有反映闰年的差异。
我在做什么错?
答
只需使用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
为什么不使用PHP中的dateTime对象?它应该可以解决你的问题 – RFLdev
你的数据库中的时间戳与你的'php.ini'中的日期设置是否在同一时区?如果不是,那么在将它发送到数据库之前,需要符合php日期。 – Daniel
为什么不使用SQL内置的日期函数?他们应该处理这些事情。类似于NOW() - INTERVAL 1 YEAR' – apokryfos