DateTime 在 PHP 中返回总天数而不是剩余天数
DateTime returning Total days instead of Remaining days in PHP
我有一个存储保修日期的 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');
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');
这将为您提供从今天到保修结束的剩余天数。
我有一个存储保修日期的 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');
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');
这将为您提供从今天到保修结束的剩余天数。