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是完全错误的,因为它没有反映闰年的差异。

我在做什么错?

+3

为什么不使用PHP中的dateTime对象?它应该可以解决你的问题 – RFLdev

+2

你的数据库中的时间戳与你的'php.ini'中的日期设置是否在同一时区?如果不是,那么在将它发送到数据库之前,需要符合php日期。 – Daniel

+1

为什么不使用SQL内置的日期函数?他们应该处理这些事情。类似于NOW() - INTERVAL 1 YEAR' – apokryfos

只需使用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