DateTime 在 PHP 中返回总天数而不是剩余天数

DateTime returning Total days instead of Remaining days in PHP

我有一个存储保修日期的 MySQL 数据库。值是 Start_Date 和 End_Date,我正在尝试计算剩余的保修天数。

示例:

尝试 #1 - 日期时间

#date_1 = 2018-12-01 (From MySQL) - Start / PAST
#date_2 = 2019-01-11 (From MySQL) - End / FUTURE

$d1 = new DateTime($date_1);
$d2 = new DateTime($date_2);

$int = date_diff($d1, $d2);
$r = $int->format('In %a days'); 

Output In 41 days

尝试#2 - Date_Create

#date_1 = 2018-12-01 (From MySQL) - Start / PAST
#date_2 = 2019-01-11 (From MySQL) - End / FUTURE

$d1 = date_create($date_1);
$d2 = date_create($date_2);

$int = date_diff($d1, $d2);

return $int->format('%a');

Output 41

尝试#3 - SQL DATEDIFF

$data = $pdo->query("
SELECT *, DATEDIFF(start_date, end_date) 
AS date_difference 
FROM `warranty` 
ORDER BY id 
DESC
")->fetchAll();

Output -41

我做错了什么?我只想计算 Invoice Warranty 剩余的天数。

查看 DATEDIFF 文档:

date1, date2    Required. Two dates to calculate the number of days between. (date1 - date2)

你需要:

DATEDIFF(end_date, start_date) 

如果我理解正确的话,你需要使用今天作为开始,而不是过去的一天,例如

$d1 = new DateTime();
$d2 = new DateTime($date_2);

$int = date_diff($d1, $d2);
$r = $int->format('In %a days'); 

这将为您提供从今天到保修结束的剩余天数。