获取两个日期之间的时间

时间:2018-06-23 12:07:01

标签: php

我使用以下代码找出两个日期之间的时间:

$date1 = "1900-00-00";
$date2 = "2000-00-00";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

printf("%d years, %d months, %d daysn", $years, $months, $days);

但这会打印100 years, 0 months, 24 daysn,而不是100 years, 0 months, 0 daysn

这是怎么回事?

2 个答案:

答案 0 :(得分:3)

您可以使用DateTime::diff类的DateTime方法来获取两个日期之间的差。您无需自己计算差异:

<?php
$date1 = "1900-00-00";
$date2 = "2000-00-00";

$dt1 = new DateTime($date1);
$dt2 = new DateTime($date2);

$diff = $dt1->diff($dt2);

printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);
//output: 100 years, 0 months, 0 days

您还可以使用过程样式来获取和输出两行中的差异:

$diff = date_diff(new DateTime("1900-00-00"), new DateTime("2000-00-00"));
printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);
//output: 100 years, 0 months, 0 days
  

演示: https://ideone.com/rosaJJ

答案 1 :(得分:0)

这是最简单的解决方案:-

$date1 = "1900-00-00";
$date2 = "2000-00-00";

$expDate =  date_create($date2);
$todayDate = date_create($date1);
$diff = date_diff($todayDate, $expDate);
printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);

您将获得预期的结果。