从表中“本周一的日期”中选择所有数据

时间:2018-12-17 15:41:58

标签: php mysql

我在数据库中有一个带有输入日期的日期字段。字段为starttimestoptime,它们定义了时间表

今天发布的开始时间是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.
    }
}

1 个答案:

答案 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。然后,您不必担心在查询中格式化特定的字符串然后进行测试。只需获得结果就可以。