0

我的数据库中有基于团队类型的记录。现在我需要系统根据输入的日期从数据库中显示整个团队的记录,即如果我输入 2012 年 6 月 6 日至 2012 年 6 月 16 日,它应该显示我的所有记录第一次约会到其他约会。(在 php 中)

$sql="SELECT mstEmp.empname,InDate, dailyattendance.InTime,dailyattendance.OutTime,mstEmp.teamtype FROM mstEmp left join dailyattendance on (dailyattendance.HolderName = mstEmp.empname) where (InDate between '$from' AND '$to') and mstEmp.teamtype='$chk' GROUP BY mstEmp.empname";
$res = mysql_query($sql);

while($row = mysql_fetch_row($res)) {           
  list($name,$indate,$in,$out,$t) = $row;
  if($row[1]==NULL ||$row[2]==NULL || $row[3]==NULL) { 
    $row[3]='NULL' ;
    $row[2]='NULL' ;
  } else {
    $row[2] = date("g:i A", $in);
    $row[3]= date("g:i A" ,$out);
  }
  $d3 = date("d-m-Y (D)", $in);
  $bg = '';
  if(date('D', $in) == 'Sun' || date('D', $in) == 'Sat')
    $bg = 'bgcolor=#EEEEEE';

  echo "<tr $bg><td colspan=4>Date: ".$d3."</td></tr>";
  if($indate != $date) {
    $date = $indate;
    echo "<tr>";
    echo "<td align=left width='35%'>".trim($name)."</td>";
    echo "<td align=center width='20%' >".$row[2]."</td>";
    echo "<td align=center  width='23%' >".$row[3]."</td>";
    echo "<td align=center width='16%'>".$t."</td>";
    //echo "</tr></table><br>";
  }
}
echo "</tr></table><br>";
echo "</form>";
4

1 回答 1

1

如果您有一个日期(字符串),并且您想向其中添加 N 天:

$date = date($format, strtotime($date, "+{$N}day"));

如果要计算从现在起 N 天后的日期:

$date = date($format, time() + $N*86400); // 86400 is number of seconds in 1 day

另一方面,如果您希望根据日期范围过滤结果(这就是您的问题的样子……),那么您有两个选择:

  1. 过滤结果SQL(在 php 之前) -WHERE date BETWEEN '$date1' and '$date2' 我强烈建议坚持使用此选项,因为如果您的表将有很多记录,则 php 中的过滤结果将消耗 cpu 和内存。

  2. 您可以先将两个日期转换为秒 - $time1 = strtotime($date1)(第二个日期相同,然后每次需要比较范围时,也转换需要比较的日期,然后检查结果整数是否介于两者之间你之前计算过。


如果您有两个日期范围(一个在输入 -$from$to)和一个在数据库(InDateOutDate列)中,那么要获取这些范围交叉的记录,您可以这样做:

`WHERE InDate >= '$to' AND OutDate <= '$from'`

如果您只想循环(在 php 中)从$dateAto $dateB,那么您可以这样做:

// strtotime() converts date to number of seconds since Jan 1 1970
// 86400 is number of seconds in a day, so it ensures steps of 1 day
for($time=strtotime($dateA); $time<=strtotime($dateB); $time+=86400) {
}
于 2012-07-16T05:05:38.300 回答