首页 > 解决方案 > 使用 PHP 从 MySQL 过滤时间和日期数据

问题描述

我不是 PHP/MySQL 程序员,但我试图通过为他创建一个非常简单的网站来帮助刚开了自己的理发店的朋友。我在网站上添加了一个将信息发送到 MySQL 数据库的联系表格。那部分工作得很好。现在,我试图通过仅显示当天安排的约会来显示即将到来的约会。

<?php

 $sql = 'SELECT * FROM tbl_content';

 $query = mysqli_query($conn, $sql);

 if (!$query) {die ('SQL Error: ' . mysqli_error($conn));
 }

date_default_timezone_set("America/New_York");
$dateToday = date('m/d/Y');
while ($row = mysqli_fetch_array($query))
   {
     $whatService = $row['service'];
     $nameData = $row['name'];
     $justName = explode(" ", $nameData);
     $timeData = $row['Time'];
     $modifiedTime = date("g:i A", strtotime($timeData));
     $currentTime = $theDate = $row['date'];
     $modDate = date('m/d/Y', strtotime($theDate ));

 if ($modDate  === $dateToday) {
    echo '<li  class="w3-bar">
       <div class="w3-bar-item">'.$justName[0].'</div>
       <span class="w3-bar-item  w3-right">'.$modifiedTime.'</span>
       <span class="w3-bar-item  w3-center w3-right">'.$whatService.'</span> 
  </li>';
   }
  }
?>

这部分工作得很好,它准确地显示了我需要的东西。但这就是问题所在。我只想显示当天剩余时间即将到来的约会。我的意思是,例如,如果现在是下午 3:00,则只显示安排在下午 3:00 之后的约会。我试图通过将其添加到条件来做到这一点:

if ($modDate  === $dateToday && date("g:i A",$modifiedTime) >= date("g:i A",strtotime("now"))) {...

我也试过

if ($modDate  === $dateToday && $modifiedTime >= date("g:i A",strtotime("now"))) {..

我不确定我需要做什么。请注意,我只包含了部分代码。如果需要更多,我会的。我将不胜感激任何帮助。谢谢。

标签: phpmysql

解决方案


在数据库级别处理这种过滤更容易、更有效,这是它们的设计目的。你的很简单,假设你的数据库服务器日期与你的理发店在同一个时区,或者插入和提取的偏移量相同,在查询中添加一个 where 子句,只返回今天和当前之后到期的约会时间:

SELECT * FROM tbl_content WHERE Time > CURTIME() AND date = CURDATE()

我还建议将日期时间存储在一起(日期时间字段类型),这使得许多查询更易于管理,并且速度更快。

如果您有一个字段,则查询将是:

SELECT * FROM tbl_content WHERE DateTme > NOW() AND date(DateTime) = CURDATE()

您还应该将索引添加到Timedate


推荐阅读