我存储了代表具有学说的事件的文件。每个$event
都有一个$eventType
。每个$eventType
都有$duration
。
对于每个$event
,我只会存储$begin
但不会存储,因为它可以使用$duration
的默认$eventType
进行计算。
使用每种eventType存储持续时间的最佳方式是什么?
简化的eventType模型如下所示
<?php
/**
* Class EventType
* @ODM\Document(collection="EventType")
*/
class EventType {
/**
* @var $duration int
* @ODM\Int
*/
private $duration;
}
答案 0 :(得分:1)
如您所述,您可以以秒为单位保存持续时间。 拥有一个getEnd方法非常简单:
/**
* return \DateTime
*/
public function getEnd()
{
$end = clone $this->begin;
return $end->add(new DateInterval('PT' . $this->duration . 'S'));
}
或者你可以存储$ end日期,而不是你也可以计算的持续时间:
/**
* return \DateInterval
*/
public function getDuration()
{
return $begin->diff($end);
}
日期差异的棘手问题是夏令时:有时你可以
date + 3600seconds == date + 2*3600seconds
因此,您应该考虑将为结束日期提出何种类型的查询:您将选择持续(多于或少于)给定时间的事件,还是选择结束(之前/之后/之后)的事件给定日期?
第二个选项更常见,所以我会存储结束日期。