0

我对修改 php DateTime 对象的正确方法有疑问。目前,我正在做类似的事情:

$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);

无论我们是从 $someOtherEvent 中增加还是减少时间,使用 DateTime::add() 方法似乎都有效。这是正确的方法吗?我知道有用于减去时间的 DateTime::sub(),但似乎只要 DateInterval(由 $origEvent->diff() 产生)具有反转标志,DateTime::add() 就知道实际上减去时间。这个对吗?我应该使用 DateTime::modify 之类的东西吗?

4

1 回答 1

0

实际上,DateTime::diff() 以相对的方式返回两个 DateTime 对象之间的差异。因此 :

  • 如果 date1 小于 date2 则 date1->diff(date2) 将导致间隔
  • 如果 date2 小于 date1 则 date1->diff(date2) 将产生一个区间

所以 :

  • 使用带有负间隔的 DateTime::add() 等价于使用带有相同间隔的绝对值的 DateTime::sub()
  • 使用带负间隔的 DateTime::sub() 等价于使用具有相同间隔绝对值的 DateTime::add()

出于代码清晰的原因,您可以将 DateTime::diff() 的第二个参数设置为 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 回答