如何在学说中加2小时?

时间:2011-06-06 16:21:07

标签: php doctrine-orm

使用以下代码

protected $token;
 /** @Column(name="assigneddate", type="datetime", columnDefinition="datetime") */
private $assigneddate;


/** @Column(name="expirydate", type="datetime", columnDefinition="datetime") */
private $expirydate;

/** @PreUpdate */
public function updated()
{
    //$this->assigneddate = new \DateTime("now");
}
public function __construct()
{

    $this->expirydate = $this->expirydate = new \DateTime("now");
    $this->assigneddate = $this->assigneddate = new \DateTime("now");

}

如何为此添加2小时?

4 个答案:

答案 0 :(得分:7)

这更像是一个PHP问题。要为DateTime PHP对象添加时间,请使用add method,它接受​​DateInterval对象。在您的情况下,如果您想在到期日期间增加2小时:

// Create DateTime object with current time/date
$this->expirydate = new \DateTime("now");
// Add two hours
$this->expirydate->add(new \DateInterval("PT2H"));

其中“PT2H”表示“2小时的周期时间”,具体为here

答案 1 :(得分:2)

默认情况下,学说只允许间隔为DAYMONTHYEAR。在尝试添加示例8 HOUR时,它会返回错误。

但你可以做到这一点:

Let 8 be the number of hours
Let 24 be the number of hours a day.

8/24 = decimal presentation of the hour.

$nHour = 8/24; //result will be: 0.3333333

然后在学说中使用它:

DATE_ADD(CURRENT_TIMESTAMP(), $nHour, 'DAY') as dateaddhour

答案 2 :(得分:1)

确定。这是PT2H。

$this->expirydate = new \DateTime("now");
// Add two hours
$this->expirydate->add(new \DateInterval("PT2H"));

答案 3 :(得分:0)

为实体方面已经给出的答案提供其他几种替代方案。

您不需要添加或修改日期,您可以使用相对格式创建新的DateTime对象http://php.net/manual/en/datetime.formats.relative.php

例如:last friday of june 2011(2011-06-24)

对OP的行为或遇到问题的行为并不十分清楚,因此提供了一些方法。

如果想在创建对象时添加2小时

/**
 * "now" is implicit
 */
public function __construct()
{
    $this->assigneddate = new \DateTime;
    $this->expirydate = new \DateTime('+2 hour');
}

或更新发生时

  /**
  * @PreUpdate
  */
  public function updated()
  {
      $this->assigneddate = new \DateTime;
      $this->expirydate = new \DateTime('+2 hour');
  }

当在其上调用modified / add / sub时,确保在Doctrine中更新现有值的另一种方法。使用PHP 5.5,您现在可以使用DateTimeImmutable因此,如果您希望将expirydate时间增加/修改2小时。

public function __construct()
{
    $this->expirydate = new \DateTimeImmutable;
    $this->assigneddate = new \DateTimeImmutable;
}

/**
 * @PreUpdate
 */
public function updated()
{
    $this->assigneddate = new \DateTimeImmutable;
    $this->expirydate = $this->expirydate->modify('+2 hour');
}

这将导致expirydate向现有的expirydate添加2个小时,因为DateTimeImmutable将始终返回一个新对象,然后该教条将处理。 http://php.net/manual/en/class.datetimeimmutable.php