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

一方、(そしてそれがあなたの質問から実際に見えるものです...)日付範囲に基づいて結果をフィルタリングしようとしている場合は、2つのオプションがあります。

  1. 結果をSQL(PHP の前に) フィルタリングする -WHERE date BETWEEN '$date1' and '$date2' テーブルに多くのレコードが含まれる場合、PHP で結果をフィルタリングすると CPU とメモリが消費されるため、このオプションを使用することを強くお勧めします。

  2. 最初に両方の日付を秒に変換できます- $time1 = strtotime($date1)(2番目の日付についても同じです。次に、範囲と比較する必要があるたびに、比較する必要がある日付も変換し、結果の整数が2つの間にあるかどうかを確認します先に計算しました。


2 つの日付範囲 (入力 -$fromおよび$to) とデータベース (InDateおよびOutDate列) に 1 つずつある場合、これらの範囲が交差するレコードを取得するには、次のようにします。

`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) {
}
于 2012-07-16T05:05:38.300 に答える