我的数据库记录基于团队类型。现在我需要系统根据输入的日期从数据库显示整个团队的记录,即如果我输入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>";
答案 0 :(得分:1)
如果您有日期(字符串),并且想要为其添加N天:
$date = date($format, strtotime($date, "+{$N}day"));
如果您想从现在起计算N天的日期:
$date = date($format, time() + $N*86400); // 86400 is number of seconds in 1 day
另一方面(如果你的问题看起来真的那么......)你想要根据日期范围过滤结果,那么你有两个选择:
在SQL
(在php之前)过滤结果 - WHERE date BETWEEN '$date1' and '$date2'
我强烈建议坚持使用这个选项,因为如果你的表有很多记录,php中的过滤结果将是cpu和内存消耗。
您可以先将两个日期转换为秒 - $time1 = strtotime($date1)
(第二个日期相同,然后每次需要与范围进行比较时,转换您需要比较的日期,并检查结果整数是否介于之前计算的整数之间。
如果您有两个日期范围(一个在输入中 - $from
和$to
),另一个在数据库中(InDate
和OutDate
列),那么要获取记录在这些范围交叉的地方你可以这样做:
`WHERE InDate >= '$to' AND OutDate <= '$from'`
如果您只想从$dateA
循环(在php中)到$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) {
}