【问题标题】:Days calculation is not given correct days天数计算未给出正确的天数
【发布时间】:2019-03-01 12:50:15
【问题描述】:

我想根据两个日期计算天数,但给出的天数不正确。

我有 2 个变量

$date=$date[1]; 来自数据库 $now =date('d/m/Y');当前日期

$date变量值是(来自db)05/03/2019

我使用以下脚本根据两个日期计算天数,但返回 120 天。

方法一

$date=$date[1]; `Is coming from Database`
$now =date('d/m/Y');

$date1 = new DateTime($now);
$date2 = new DateTime($date);
$diff = $date2->diff($date1)->format("%a");

方法二

$datetime1 = new DateTime($now);
$datetime2 = new DateTime($date);

$difference = $datetime1->diff($datetime2);

echo 'Difference: '.$difference->y.' years, ' 
                   .$difference->m.' months, ' 
                   .$difference->d.' days';

print_r($difference);

但它在以下输出中返回错误的日期

Difference: 0 years, 4 months, 120 daysDateInterval Object
(
    [y] = 0
    [m] = 4
    [d] = 0
    [h] = 0
    [i] = 0
    [s] = 0
    [invert] = 0
    [days] = 120
)

为什么这给出了错误的天数输出?

【问题讨论】:

  • 数据库中的日期是存储为字符串还是存储在Date/timestamp 列中?
  • 您的问题的原因是您没有使用正确的日期格式(有关如何从该格式创建 DateTime 对象,请参阅下面的 Maxim 的回答)。您应该始终将您的日期信息存储在 datetimestamp 列中,这使得处理日期更容易
  • 使用正确的日期数据类型为自己省去一个痛苦的世界并存储日期。

标签: php mysql date


【解决方案1】:

如果您使用 'd/m/Y' 格式,您应该使用createFromFormat 函数将字符串日期转换为日期对象。例如:

$date1 = new \DateTime();
$date2 = \DateTime::createFromFormat('d/m/Y', '05/03/2019');

$diff = $date2->diff($date1)->format("%a");

【讨论】:

  • 请在$date1变量中附加您的日期
  • 是的,它实际上正在工作,它需要墨尔本时间,我签入了 IST,但最终它工作了。非常感谢!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2022-11-10
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多