修改php DateTime对象

时间:2012-06-18 23:01:11

标签: php datetime dateinterval

我有一个关于修改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);

使用DateTime :: add()方法似乎无论我们是在$ someOtherEvent中添加还是减去时间。这是正确的方法吗?我知道有DateTime :: sub()用于减去时间,但似乎只要DateInterval(由$ origEvent-> diff()生成)具有反转标志,DateTime :: add()就知道了实际上减去时间。它是否正确?我应该使用像DateTime :: modify这样的东西吗?

1 个答案:

答案 0 :(得分: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()尚不可用)