web-dev-qa-db-ja.com

PHP 5.2.8の2つのDateTimeオブジェクトを比較するにはどうすればよいですか?

PHPのドキュメントを見てみると、DateTimeオブジェクトの以下の2つのメソッドは、どちらも私の問題を解決するようです。

  • DateTime :: diff :違いを見つけ、それを使ってどちらが古くなっているかを判断します。
  • DateTime :: getTimestamp :UNIXのタイムスタンプを取得して比較します。

これらのメソッドは両方とも、バージョン5.3以降で利用可能であるとして doco でマークされています(そして、驚くことではないが、私がそれらを呼び出そうとした場合、それらは存在しません)。 5.2.8に関する具体的なドキュメントが見つからないため、自分のバージョンに同等のメソッドがあるかどうかわかりません。私は Googled 問題を抱えていて、折衷的な範囲の解決策を見つけましたが、どれも私の非常に単純な要件には答えられません。

  • 2つのDateTimeオブジェクトを比較する方法
  • 以前のPHPバージョンのドキュメントはどこにありますか。具体的にはバージョン5.2.8?

状況によっては、次のようなコードがあります。

$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));

// is the end date more ancient than the start date?
if ($end_dt < $start_dt) 

どうやらこの男には比較演算子がありません。

編集する

どうやら私の仮定は完全に間違っていました(これを効果的に説明してくれたMilenに感謝します)。比較演算子があり、それはちょうどうまく動作します。時々私は本当にコンパイラが恋しいです。バグは上記のコードにあります、私はあなたがそれをはるかに速く見つけたと確信しています:)。

272
RedBlueThing

以下は、DateTimeクラスに比較演算子があることを確認しているようです。

dev:~# php
<?php
date_default_timezone_set('Europe/London');

$d1 = new DateTime('2008-08-03 14:52:10');
$d2 = new DateTime('2008-01-03 11:11:10');
var_dump($d1 == $d2);
var_dump($d1 > $d2);
var_dump($d1 < $d2);
?>
bool(false)
bool(true)
bool(false)
dev:~# php -v
PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
dev:~#
402
Milen A. Radev

から 公式文書

PHP 5.2.2以降、DateTimeオブジェクトは 比較演算子 を使用して比較できます。

$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2); // false
var_dump($date1 < $date2); // true
var_dump($date1 > $date2); // false

5.2.2より前のバージョンのPHP(実際にはすべてのバージョン)には、 diff を使用できます。

$datetime1 = new DateTime('2009-10-11'); // 11 October 2013
$datetime2 = new DateTime('2009-10-13'); // 13 October 2013

$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days'); // +2 days
39
Roberto Alonso

エポック秒を比較することもできます。

$d1->format('U') < $d2->format('U')

出典: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (DateTimeに関する非常に興味深い記事)

30
Julien

時間ではなく日付を比較したい場合は、これを使用できます。

$d1->format("Y-m-d") == $d2->format("Y-m-d")
18
blablabla

これはあなたを助けるかもしれません。

$today = date("m-d-Y H:i:s");
$thisMonth =date("m");
$thisYear = date("y");
$expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00";


if (strtotime($expectedDate) > strtotime($today)) {
    echo "Expected date is greater then current date";
    return ;
} else
{
 echo "Expected date is lesser then current date";
}
0
Tarun Gupta

PHP 7.x以降、次のものを使用できます。

$aDate = new \DateTime('@'.(time()));
$bDate = new \DateTime('@'.(time() - 3600));

$aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`
0
jens1o
$elapsed = '2592000';
// Time in the past
$time_past = '2014-07-16 11:35:33';
$time_past = strtotime($time_past);

// Add a month to that time
$time_past = $time_past + $elapsed;

// Time NOW
$time_now = time();

// Check if its been a month since time past
if($time_past > $time_now){
    echo 'Hasnt been a month';    
}else{
    echo 'Been longer than a month';
}
0
toystory