我有28个独特的活动,每天一个活动。 28之后的事件重复是1.事件再次发生。
让我们说第一个事件是1970-01-01
。第28项赛事为1970-01-28
。
今天是2015-10-16
,我如何知道今天应该是什么活动?如何确定任何给定日期应该发生什么事件? (只是日期> 1970-01-01
和< 9999-12-31
)。
我在考虑将date
转换为timestamp
,然后以28 * 24 * 60 * 60为模,然后将其转换回date
,但我害怕可能会有一些余地。有什么想法吗?
答案 0 :(得分:1)
您可以使用DateTime::diff
功能,如下所示:
$datetime1 = date_create('1970-01-28');
$datetime2 = date_create('2015-10-16');
$interval = date_diff($datetime2, $datetime1);
/// Get total number of days
$days = $interval->format('%a');
/// Get the remainder of the division by the number of events
$eventNumber = $days % 28;
答案 1 :(得分:1)
另一个解决方案是使用unix时间戳来获取以秒为单位的日期差异。根据定义,自01-01-1970为零,您所要做的就是:
$today = mktime(); // Or $today = mktime(12,0,0,10,16,2015);
$mod = floor($today/86400) % 28;