2012-06-11 2 views
-1

У меня есть две таблицы, называемые work_details и holy_days.показать общее количество раз в день

Таблица Holy_days содержит строку для каждого праздника в каждом году. work_details содержит строку для каждого рабочего отчета для каждого сотрудника.

Я хочу получить отчет о выходе (ежегодно &) всех сотрудников.

Я хочу, чтобы показать, сколько дней отпуска они взяли в год, а также в месяц (с датами)

Рассчитайте оставить дни кроме субботы, воскресенья и дат в таблице holy_days. Я использую следующий код, но это не работает должным образом. Помогите кому-нибудь PLZ.

if ($request->isPost()) { 
    $sdate1 = $request->get('txt_date1','post'); 
    $d1=explode('/', $sdate1); 
    $sdate= $d1['2'].'-'.$d1['0'].'-'.$d1['1']; 
    $edate1 = $request->get('txt_date2','post'); 
    $d2=explode('/', $edate1); 
    $edate= $d2['2'].'-'.$d2['0'].'-'.$d2['1']; 
$count=dates_between($emp_id,$sdate,$edate); 

echo $count; 

    } 


function dates_between($emp_id,$start_date, $end_date = false) 
{ 
    if (!$end_date) 
    { 
     $end_date = date("Y-m-d"); 
    } 

    $test_date = $start_date; 
    $day_incrementer = 1; 
    $count_leaves=0; 
    $flag=0; 
    echo "SELECT DISTINCT date FROM `work_details` WHERE employee_id='".$emp_id."' and date between '".$start_date."' and '".$end_date."'"; 
$work_res = mysql_query("SELECT DISTINCT date FROM `work_details` WHERE employee_id='".$emp_id."' and date between '".$start_date."' and '".$end_date."'"); 

do 
    { 
      while($row=mysql_fetch_array($work_res)) 
       { 
       while((date("Y-m-d",$test_date)<$row['date'])&&($flag=0)) 

       { 

        if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) 
        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
          $count_leaves++; 
        } 
         $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


       } 
       $flag=1; 


       while((date("Y-m-d",$test_date)!=$row['date'])) 
        { 
        if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) 
        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
         $count_leaves++; 
        } 
         $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


        } 
        $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 



       } 
       if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)&&($test_date <= $end_date)) 
        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
         $count_leaves++; 
         $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


        } 


} 
while ($test_date <= $end_date); 

return($count_leaves); 
} 
+1

Пожалуйста, уточните свой вопрос, чтобы объяснить, что вы подразумеваете под словом «не работает должным образом». – avesse

+0

Также, пожалуйста, уточните, что вы пытаетесь выполнить (поскольку мой грубый смелый текст редактируется на ваш вопрос.) –

+0

Am попытался с вышеуказанным кодом. но у меня были целые даты с 1970 года .... Я хочу получить общее количество отпуска, получаемого сотрудником в каждом году – Natasha

ответ

3

Наташа. Проверь это! Вы непременно будете удивлены :)

function dates_between($emp_id,$start_date, $end_date = false) 
{ 
    $qsdate=$start_date; 
    $qedate=$end_date; 
    //echo $start_date.$end_date; 
    if (!$end_date) 
    { 
     $end_date = date("Y-m-d"); 
    } 

    $start_date = is_int($start_date) ? $start_date : strtotime($start_date); 
    $end_date = is_int($end_date) ? $end_date : strtotime($end_date); 

    $test_date = $start_date; 
    $day_incrementer = 1; 
    $count_leaves=0; 
    $flag=0; 

$work_res = mysql_query("SELECT DISTINCT date FROM `work_details` WHERE employee_id='".$emp_id."' and date between '".$qsdate."' and '".$qedate."'"); 


      while($row=mysql_fetch_array($work_res)) 
       { 
       while((date("Y-m-d",$test_date)<$row['date'])&&($flag=0)) 

       { 

        if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) 

        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
          $count_leaves++; 
        } 
         $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


       } 
       $flag=1; 


       while((date("Y-m-d",$test_date)!=$row['date'])) 
        { 
       if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) 

        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
         $count_leaves++; 
        } 
         $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


        } 
        $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 



       } 


       while (date("Y-m-d", $test_date) <= date("Y-m-d", $end_date)) 
    { 
      if(!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) 

        { 
         echo "<tr><td align=center class=fontclass style=color:FF0000>".date("Y-m-d", $test_date)."</td></tr>"; 
         $count_leaves++; 



        } 
        $test_date = $test_date + ($day_incrementer * 60 * 60 * 24); 


    } 


return($count_leaves); 
} 
+0

Спасибо, что так много ............ – Natasha

0
SELECT DISTINCT date 
FROM `work_details` 
WHERE employee_id='".$emp_id."' 
and date between '".$start_date."' and '".$end_date."' 
and date NOT IN(SELECT date from Holy_Days) 

Предполагая, что есть столбец дата в таблице Holy_Days.

Смежные вопросы