我在数据库中有一个带有输入日期的日期字段。字段为starttime
和stoptime
,它们定义了时间表
今天发布的开始时间是2018-12-17 00:00:00
,结束时间是2018-12-17 11:59:59
开始时间示例:
2018-12-17 15:30:00,
2018-12-24 06:00:00,
2018-12-17 10:00:00,
2018-12-17 09:00:00
和停止时间(以相同顺序)
2018-12-17 16:00:00,
2018-12-24 07:00:00,
2018-12-17 12:30:00,
2018-12-17 10:30:00
它将仅显示2018-12-17 09:00:00/2018-12-17 10:30:00
或除上面的1以外的所有其他内容(如果我切换操作)登录if语句。
$starttime = date("Y-m-d H:i:s", strtotime('last monday', strtotime('next sunday')));
$stoptime = strtotime(date("Y-m-d H:i:s", strtotime($starttime))) + 43199;
$stoptime = date("Y-m-d H:i:s", $stoptime);
$stmt2 = $db->prepare("SELECT * FROM schedule WHERE day = :day");
$stmt2->execute(array(':day' => "Monday"));
while($row2 = $stmt2->fetch()){
if($row2['starttime'] >= $starttime AND $row2['stoptime'] <= $stoptime){
//data gets displayed here.
}
}
答案 0 :(得分:0)
您似乎误解了日期/时间。从43199的供应量来看,这是不到1秒的时间,然后是12小时,而不是一天24小时。因此,您得到的是那些在中午12点之前而不是早晨12点之前的条目。如果您使用24小时制,则24小时的工作时间为86,400,或者少于86,399的时间为1秒。
此外,您可以更新查询以仅考虑开始时间,只要在相关开始日期之内就可以。如果结束时间恰好移到下一个日期,我相信您也希望在结果集中显示该时间。
SELECT *
FROM schedule
WHERE startTime >= '2018-12-17'
and starttime < date_add( '2018-12-17', interval 7 days)
现在,在上述示例中,我的工作量不到7天。因此,让我们看一下。“ 2017-12-17”的开始日期/时间隐含在以下时间:午夜00:00:00。通过少于7天的时间,它可以覆盖下周日晚上11:59:59(或24小时制23:59:59)的整个一周。因此,在下周的星期一之前将是LESS。然后,您不必担心在查询中格式化特定的字符串然后进行测试。只需获得结果就可以。