0

phpDateTimeオブジェクトを変更する適切な方法について質問があります。現在、私は次のようなことをしています。

$origEvent = new DateTime(...);
$newEvent = new DateTime(...);
$someOtherEvent = new DateTime(...);

//get the time difference between the orignal event and the edited event
$diff = $origEvent->diff($newEvent);

$someOtherEvent->add($diff);

DateTime :: add()メソッドの使用は、$someOtherEventから時間を加算するか減算するかに関係なく機能するようです。これはこれを行う正しい方法ですか?時間の減算に使用されるDateTime::sub()があることは知っていますが、DateInterval($ origEvent-> diff()によって生成される)に反転フラグがある限り、DateTime :: add()は次のことを認識しているようです。実際に時間を差し引きます。これは正しいです?DateTime :: modifyのようなものを使用する必要がありますか?

4

1 に答える 1

0

実際、DateTime :: diff()は、2つのDateTimeオブジェクト間の差を相対的な方法で返します。したがって :

  • date1がdate2よりも低い場合、date1-> diff(date2)はの間隔になります
  • date2がdate1よりも低い場合、date1-> diff(date2)はの間隔になります

それで :

  • 負の間隔でDateTime::add()を使用することは、この同じ間隔の絶対値でDateTime :: sub()を使用することと同じです。
  • 負の間隔でDateTime::sub()を使用することは、この同じ間隔の絶対値でDateTime :: add()を使用することと同じです。

コードをわかりやすくするために、DateTime :: diff()の2番目のパラメーターをtrueに設定して、毎回絶対差を取得し、DateTime :: add()とDateTime :: sub()の間で最適な関数を選択できます。 )絶対的な違いがあることを知っています。

DateTime :: modify()とDateTime :: add()、DateTime:sub()の間の選択についてのいくつかの言葉:

  • DateTime :: diff()を使用している限り、PHPバージョンは5.3.0以上であると想定しており、このPHPバージョンで使用可能なすべての新しい関数を使用できます。つまり、DateTime :: add()とDateTime :: sub()
  • PHPのバージョンが5.2.0以上の場合、DateTime :: modify()の使用は正当化されます。(このバージョンでは、DateTime :: add()およびDateTime :: sub()はまだ使用できません)
于 2012-06-18T23:27:26.613 に答える