簡體   English   中英

日期時間返回總天數而不是 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'); 

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

我究竟做錯了什么? 我只想計算發票保修的剩余天數。

檢查 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'); 

這將為您提供從今天到保修期結束的剩余天數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM