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

时间:2019-01-09 07:50:11

标签: php date pdo datediff date-difference

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

示例:

  • 发票0001
  • 保修开始(2018-12-01)
  • 保修期结束(2019-01-11)
  • 输出:保修期为2天(假设当前为2019-01-09)

尝试#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'); 
  

41天之内输出

尝试#2-创建日期

#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');
  

输出41

尝试#3-SQL DATEDIFF

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

输出-41

我在做什么错?我只想计算发票保修剩余的天数。

2 个答案:

答案 0 :(得分:0)

检查DATEDIFF文档:

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

您需要:

DATEDIFF(end_date, start_date) 

答案 1 :(得分:0)

如果我对您的理解正确,则需要使用今天开始,而不是过去的一天,例如

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

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

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