Как добавить 2 часа в учение? - PullRequest
1 голос
/ 06 июня 2011

со следующим кодом,

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 ]

7 голосов
/ 06 июня 2011

Это больше вопрос PHP. Чтобы добавить время к объекту PHP DateTime , используйте метод add , который принимает объект 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 часа», как указано здесь .

2 голосов
/ 06 марта 2014

По умолчанию доктрина допускает только интервалы DAY, MONTH и YEAR Полагаю. При попытке добавить пример в 8 ЧАС возвращает ошибку.

Но вы можете сделать этот трюк:

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
1 голос
/ 07 июня 2011

Хорошо.Это PT2H.

$this->expirydate = new \DateTime("now");
// Add two hours
$this->expirydate->add(new \DateInterval("PT2H"));
0 голосов
/ 26 февраля 2015

Чтобы предоставить пару других альтернатив уже заданным ответам со стороны объекта.

Вам не нужно добавлять или изменять дату, вы можете создать новый объект DateTime с относительными форматами http://php.net/manual/en/datetime.formats.relative.php

Например: last friday of june 2011 (2011-06-24)

Было не совсем понятно, какое поведение было после ОП или возникли проблемы, поэтому предоставили несколько методов.

Если вы хотите добавить 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');
  }

Еще одна альтернатива для обеспечения того, чтобы существующее значение обновлялось в Doctrine, когда для него вызывается изменение / add / sub. С 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 добавить 2 часа к существующему выдоху, так как DateTimeImmutable всегда будет возвращать новый объект, который затем будет обрабатываться доктриной. http://php.net/manual/en/class.datetimeimmutable.php

...