假设我在变量中有两个日期,例如
$date1 = "2009-09-01"; $date2 = "2010-05-01";
我需要获取介于$date2和$date1($date2 >= $date1)之间的月份数。即我需要得到8。
$date2
$date1
$date2 >= $date1
8
有没有一种方法可以通过使用日期函数来获取它,或者我必须爆炸字符串并进行一些计算?
非常感谢
对于PHP> = 5.3
$d1 = new DateTime("2009-09-01"); $d2 = new DateTime("2010-05-01"); var_dump($d1->diff($d2)->m); // int(4) var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12)); // int(8)
DateTime :: diff返回一个DateInterval对象
如果您未使用PHP 5.3或更高版本运行,我想您将不得不使用unix时间戳:
$d1 = "2009-09-01"; $d2 = "2010-05-01"; echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30)); // 8
但这不是很精确(每月并不总是30天)。
最后一件事:如果这些日期来自您的数据库,请使用DBMS而不是PHP来完成此工作。
编辑: 如果您不能使用DateTime :: diff或RDBMS,则此代码应该更精确:
$d1 = strtotime("2009-09-01"); $d2 = strtotime("2010-05-01"); $min_date = min($d1, $d2); $max_date = max($d1, $d2); $i = 0; while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) { $i++; } echo $i; // 8