2013-03-14 4 views
34
$today = new DateTime(); 
$date = new DateTime('2013-03-10'); 
$interval = $date->diff($today); 
return $interval->days; 
// returns 4 


$today = new DateTime(); 
$date = new DateTime('2013-03-10'); 
$interval = $today->diff($date); // arguments swapped around here 
return $interval->days; 
// returns 4 

なぜこれらの関数は両方とも正の4を返しますか? $ dateが過去の日付の場合、負の数値を返すにはどうすればよいですか?datetime-> daysは常に正の数を返します

+1

'Diff'の戻り値は' DateInterval'オブジェクトです。どのように出力していますか? –

+0

申し訳ありません、私のコードに誤字が入りました。 – JonoB

+7

'DateInterval'オブジェクトには、正か負かを指定する' invert'プロパティがあります:http://php.net/manual/de/class.dateinterval.php –

答えて

49

DateInterval::formatを使用できます。

return $interval->format("%r%a");

必要であればint型にキャスト:

return (int)$interval->format("%r%a");

+0

$ objA - > diff($ objB)== $ objB - $ objAをクリアしないでください。私は詳細で新しい答えを追加します。 –

5

ここでは、あなたの答えです:

$today = new DateTime(); 
$date = new DateTime('2013-03-10'); 
$interval = $today->diff($date); 
echo $interval->format("%r%a"); 

Test it here

2

あなたはこのようにタイムスタンプを使用することができます。

<?php 
    $date1 = '2015-01-02'; 
    $date2 = '2015-01-05'; 
    $diff = strtotime($date1, 'Y-m-d') - strtotime($date2, 'Y-m-d'); 
?> 

$ diffは負または正を返します。

3

次の2つのDateTimeオブジェクトを差分のされている場合は、以下のルールが適用されます。例として

$objA->diff($objB) == $objB - $objA 

を:

$todayDateObj = new \DateTime('2016/5/26'); 
$foundedDateObj = new \DateTime('1773/7/4'); 

$interval = $todayDateObj->diff($foundedDateObj); 
echo $interval->format('%r%a') . "\n\n"; 
// -88714 

$interval2 = $foundedDateObj->diff($todayDateObj); 
echo $interval2->format('%r%a'); 
// 88714 
10

日が過去になっている場合日がある場合は、意志1.
を反転将来invertは0になります。

$ invert = $ interval-> invert;

関連する問題