3

PHPで月の2つの日付の差を計算したかったのですが、どこかにバグがあるようです。

$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y));

結果:

29/01/2016
27/01/2015

$dateInterval = $datetime1->diff($datetime2);
echo($dateInterval->format(%m months);

結果:

0 months

何故ですか?私は何を間違っていますか?

4

5 に答える 5

4
$currentDateTime = new DateTime;
$dateTimeInTheFuture = new DateTime(MyObject->getDate());

$dateInterval = $dateTimeInTheFuture->diff($currentDateTime);

$totalMonths = 12 * $dateInterval->y + $dateInterval->m;

echo $totalMonths;
于 2016-01-29T11:56:25.420 に答える
2

2 つの日付の間の月を計算します。

PHP >=5.3の場合、以下のように DateInterval オブジェクトを返す DateTime diff を使用できます。

$d1 = new DateTime("2013-12-09");
$d2 = new DateTime("2014-03-17");

var_dump($d1->diff($d2)->m); 
var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12));

PHP 5.3 以降を使用していない場合は、関数を使用strtotime() してタイムスタンプ (任意の日付から 1970 年 1 月 1 日 00:00:00 までの秒数) を取得できます。

$d1 = "2013-12-09";
$d2 = "2014-03-17";
echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30));

http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php

于 2016-01-29T11:53:49.417 に答える
0
// @link http://www.php.net/manual/en/class.datetime.php
$d1 = new DateTime(date('Y-m-d'));
$d2 = new DateTime(MyObject->getDate());

// @link http://www.php.net/manual/en/class.dateinterval.php
$interval = $d2->diff($d1);

$interval->format('%m months');
于 2016-01-29T11:45:02.233 に答える
0

一重引用符の終了を逃しただけです。

$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y'));//You are missing single quote here

私もこのコードを試していますが、

<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-12-13');
echo($datetime1->format('d/m/Y'));
echo "<br/>";
echo($datetime2->format('d/m/Y'));
$dateInterval = $datetime1->diff($datetime2);
//print_r(arrayColumn($dateInterval,'m'));
echo "<br>Month are :".$dateInterval->format('%m');
exit; 

?>
于 2016-01-29T12:05:37.367 に答える
0

DateTime::diffを除いて、相対値を返しますdays。したがって、月の絶対差を計算するには、次を使用する必要があります。

$datetime1->diff($datetime2)->format('%y')*12+$datetime1->diff($datetime2)->format('%m');
于 2016-01-29T11:54:07.353 に答える