PHP datetime子问题

Nov*_*ing 1 php datetime

$currentDT = new \DateTime(); 
$filterRange = new \DateInterval('PT30S'); 
$filterDate = $currentDT->sub($filterRange); 
var_dump($currentDT); 
var_dump($filterDate);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

object(DateTime)[246]
  public 'date' => string '2011-12-10 15:53:42' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'America/New_York' (length=16)
object(DateTime)[246]
  public 'date' => string '2011-12-10 15:53:42' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'America/New_York' (length=16)
Run Code Online (Sandbox Code Playgroud)

$ currentDT和$ filterDate是相同的...即使它们应该是30s不同.知道为什么吗?

sal*_*the 7

这是预期的行为,减法作用于原始对象,然后返回.这可以通过可见246var_dump()输出,表示他们是同一个对象.

如果您希望保持原始物体不变,clone则在进行减法之前需要进行此操作.

$currentDT   = new \DateTime('2011-12-13 14:15:16');
$filterRange = new \DateInterval('PT30S');
$filterDate  = clone $currentDT;
$filterDate->sub($filterRange);
var_dump($currentDT, $filterDate);
Run Code Online (Sandbox Code Playgroud)