【发布时间】:2019-01-09 07:50:10
【问题描述】:
我有一个存储保修日期的 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_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');
输出 41
尝试 #3 - SQL DATEDIFF
$data = $pdo->query("
SELECT *, DATEDIFF(start_date, end_date)
AS date_difference
FROM `warranty`
ORDER BY id
DESC
")->fetchAll();
输出 -41
我做错了什么?我只是想计算发票保修的剩余天数。
【问题讨论】:
-
从 2018 年 12 月 1 日到 2019 年 1 月 11 日有 41 天,请问有什么问题?
-
@JulesR 阅读最底部,真正解释。如果我得到所需的结果,我不会问这个。我不想在保修期内找到“剩余天数”
-
反转开始和结束?
-
如果您阅读过文档,我想您不会问这个问题:sql.sh/fonctions/datediff
-
从你的代码中看不清楚,但是你是说你想知道今天的日期还剩下多少天吗?因为如果是这样,您需要使用当前日期而不是过去的日期。
标签: php date pdo datediff date-difference