我有两个日期,格式类似于“Y-m-d H:i:s”。我需要比较这两个日期并找出小时差。我怎样才能做到这一点?
您可以将它们转换为时间戳并从那里开始:
$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1);
除以 3600,因为一小时有 3600 秒,并使用
round()
以避免出现很多小数位。
您也可以使用 DateTime 类 -
$d1= new DateTime("06-08-2015 01:33:26pm"); // first date
$d2= new DateTime("06-07-2015 10:33:26am"); // second date
$interval= $d1->diff($d2); // get difference between two dates
echo ($interval->days * 24) + $interval->h; // convert days to hours and add hours from difference
\DateTime::diff
可用!
$f = 'Y-m-d H:i:s';
$d1 = \DateTime::createFromFormat($date1, $f);
$d2 = \DateTime::createFromFormat($date2, $f);
/**
* @var \DateInterval $diff
*/
$diff = $d2->diff($d1);
$hours = $diff->h + ($diff->days * 24); // + ($diff->m > 30 ? 1 : 0) to be more precise
\DateInterval
文档。
$seconds = strtotime($date2) - strtotime($date1);
$hours = $seconds / 60 / 60;
$time1 = new DateTime('06:56:58');
$time2 = new DateTime('15:35:00');
$time_diff = $time1->diff($time2);
echo $time_diff->h.' hours';
echo $time_diff->i.' minutes';
echo $time_diff->s.' seconds';
8小时38分2秒
问题是使用这些值的结果是 167,而它应该是 168:
$date1 = "2014-03-07 05:49:23";
$date2 = "2014-03-14 05:49:23";
$seconds = strtotime($date2) - strtotime($date1);
$hours = $seconds / 60 / 60;
$date1 = date_create('2016-12-12 09:00:00');
$date2 = date_create('2016-12-12 11:00:00');
$diff = date_diff($date1,$date2);
$hour = $diff->h;
这是因为白天节省时间。 夏令时(美国)2014 年于凌晨 2:00 开始 3 月 9 日,星期日。
从 $date1 = "2014-03-07 05:49:23" 到 $date2 = "2014-03-14 05:49:23";
你可以试试这个:
$dayinpass = "2016-09-23 20:09:12";
$today = time();
$dayinpass= strtotime($dayinpass);
echo round(abs($today-$dayinpass)/60/60);
strtotime()
来解析字符串并区分它们两个。