Как я могу подсчитать количество месяцев из следующих двух дат ниже, используя метод процедурного стиля?
PHP-код.
$delete_date = "2000-01-12 08:02:39"; $current_date = date('Ymd H:i:s'); //current date
Вы ищете DateTime :: diff ?
$delete_date = "2000-01-12 08:02:39"; $date_format = 'Ymd H:i:s'; $current_date = date($date_format); $diff = date_diff(date_create_from_format($date_format, $delete_date), date_create()); $months = $diff->m;
Что-то вроде этого.
Используя DateTime, вы получите следующие месяцы следующим образом:
$d1 = new DateTime("2000-01-12 08:02:39"); $d2 = new DateTime(); $d3 = $d1->diff($d2); $months = ($d3->y*12)+$d3->m;
Вам все равно придется обрабатывать оставшиеся дни $d3->d
… но это зависит от ваших потребностей.
это то, что вы ищете?
Как рассчитать разницу между двумя датами с помощью PHP?
$delete_date = "2000-01-12 08:02:39"; $current_date = date('Ymd H:i:s'); //current date $diff = strtotime($current_date) - strtotime($delete_date); $months = floor(floatval($diff) / (60 * 60 * 24 * 365 / 12)); echo $months . "\n";
это то, что вы ищете?
$delete_date = "2000-01-12 08:02:39"; $current_date = date('Ymd H:i:s'); //current date // convert date to int $delete_date = strtotime($delete_date); $current_date = strtotime($current_date); // calculate it $diff = $delete_date - $current_date; // convert int to time $conv_diff = date('format', $diff);
Попробуйте это, это легко, возможно, не энох цыпленок, но очень эффективный.
function calculateMonthsBetweenDates($fMonth, $fDay, $fYear, $tMonth, $tDay, $tYear) { //Build datetime vars using month, day and year $dateFrom = mktime(0, 0, 0, $fMonth, $fDay, $fYear); $dateTo = mktime(0, 0, 0, $tMonth, $tDay, $tYear); //Check dateTo is a later date than dateFrom. if($dateFrom<=$dateTo){ $yearF = date("Y", $dateFrom); $yearT = date("Y", $dateTo); $monthF = date("m", $dateFrom); $monthT = date("m", $dateTo); //same year if ($yearF == $yearT) $months = ($monthT - $monthF); else{ //different year $months = (12*($yearT-$yearF)-$monthF) + $monthT; } return $months; } else return false; //or -1 }