【问题标题】:DateTime returning Total days instead of Remaining days in PHPDateTime 返回总天数而不是 PHP 中的剩余天数
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,但我让它可以使用纯 SQL。我没有意识到 $d1 必须是当前时间,有点想应该可以取过去日期和未来日期,并计算出到未来日期的剩余天数。
【解决方案2】:

查看 DATEDIFF 文档:

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

你需要:

DATEDIFF(end_date, start_date) 

【讨论】:

  • 这就是我在 Try #3 中所拥有的,那里的位置与你的相反,但它会输出 -41 天或 41 天
  • @0111010001110000 2018 年 12 月 1 日和 2019 年 1 月 11 日之间的差异实际上是 41 天。如果您想要不同的输出,请更改输入。 (例如,将 end_date 替换为今天的日期)。
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2013-06-26
相关资源
最近更新 更多