我希望能在这里得到一些帮助,解决我长期以来一直在努力解决的问题。
我有一个MySQL数据库,其中包含事件的开始时间存储在UNIX时间的事件。我需要在一周的下一个7天(今天包括在内)循环,从早上5点到凌晨4点59分,找到在该时间段内开始的事件。
这意味着,我需要找到从1418270400到1418356799开始的所有事件,然后再添加1天以循环到两个日期(而不是86400秒)。
我已经在这方面苦苦挣扎了一段时间,而且根本无法理解这个问题......是否有一个善良的人拥有PHP的技能,请帮助我?
这是我为计算时间段所做的代码:
$timestamp = time();
$dtNow = new DateTime();
$dtNow->setTimestamp($timestamp);
$beginOfDay = clone $dtNow;
$beginOfDay->setTime(05, 00, 0);
$endOfDay = clone $beginOfDay;
$endOfDay2 = clone $beginOfDay;
$endOfDay->setTime('05, 00, 0');
$endOfDay2->setTime('05, 00, 0');
$endOfDay->add(new DateInterval('P1D'));
$endOfDay2->add(new DateInterval('P7D'));
$endOfDay->modify('1 second ago');
$endOfDay2->modify('1 second ago');
我需要从MySQL数据库获取所有事件,该数据库的时间戳在$ beginOfDay和$ endOfDay之间,但是低于$ endOfDay2 ...
答案 0 :(得分:0)
foreach ($days as $day) {
$date = new DateTime();
$date->setTimestamp($starting_timestamp); // OR
$date->setTime(5);
$date2 = new DateTime();
$date2->setTimestamp($ending_timestamp); // OR
$date2->setTime(4, 59);
$query = "SELECT event.* from events WHERE timestamp BETWEEN($date->getTimestamp(), $date2->getTimestamp())";
// query stuff or what ever you want to do.
}
只是一个可能适合您的事情的简单示例,希望这会有所帮助。
答案 1 :(得分:0)
我建议你使用mysql Date and Time Functions: 例如:
SELECT * FROM `unixtimestamp` WHERE timestamp > UNIX_TIMESTAMP(NOW()) and timestamp < UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL +7 DAY))
否则我认为你可以使用这个
<?php
$timestamp = time();
$dtNow = new DateTime(date('Y-m-d H:i:s', $timestamp));
$beginOfDay = clone $dtNow;
$beginOfDay->setTime(05, 00, 0);
echo "begin".$beginOfDay->format('Y-m-d H:i:s');
echo "<br>";
$endOfDay = clone $dtNow;
$endOfDay->setTime(04, 59, 0);
$endOfDay->modify('+1 day');
echo "end".$endOfDay->format('Y-m-d H:i:s');
echo "<br>";
$endOfWeek = clone $dtNow;
$endOfWeek->modify('+7 day');
$endOfWeek->setTime(04, 59, 0);
echo "week ".$endOfWeek->format('Y-m-d H:i:s');
echo $endOfWeek->format('U');die();
echo "<br>";die();