strtotime не работает при указании ручной даты

Я хочу увидеть разницу между двумя часами, но когда пользователь не выходит из системы, я даю ему ручной час в строке, а затем пытаюсь преобразовать его во время и проверить разницу. Однако результат всегда $d_time_in даже если эти две строки не пусты и имеют одинаковый формат.

      $start_timestamp = mktime(0, 0, 0, $_POST[selectMonth], $_POST[selectDay], $_POST[selectYear]);

$end_timestamp = $start_timestamp + 86399;

$q1 = "SELECT c.user_id, c.date, c.time_in, c.time_out, u.user_firstname, u.user_lastname
FROM control_time c
LEFT JOIN user u
ON u.user_id = c.user_id
WHERE c.date >= $start_timestamp AND c.date <= $end_timestamp";
$r1 = mysql_query($q1) or die(mysql_error());
$num_rows = mysql_num_rows($r1);

if($num_rows > 0){
$display .= "<table border=\"0\" cellspacing=\"1\" cellpadding=\"4\">

<tr>
<td bgcolor=\"#CCCCCC\"><strong>Usuario</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Fecha</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Ingreso</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Salida</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Trabajadas</strong></td>
</tr>";
while($time_info = mysql_fetch_assoc($r1)){

if($time_info[time_in] > ($time_info[date]+34200)){
$in_bg = "#F3F781";
}else{
$in_bg = "#DDDDDD";
}
//specify time in
$d_time_in = date("G:i a", $time_info[time_in]);

if($time_info[time_out] == 0){
if(date('w', $time_info[date]) == 6){
$d_time_out = '15:00 pm';
}else{
$d_time_out = '19:00 pm';
}
$out_time = strtotime($d_time_out);
$out_bg = "#F5DA81";
}else{
$d_time_out = date("G:i a", $time_info[time_out]);
$out_time = strtotime($d_time_out);
$out_bg = "#DDDDDD";
}

$difference_hours = strtotime($d_time_in) - $out_time;
if($difference_hours != 0){
$d_time_worked = date("G:i",$difference_hours);
}else{
$d_time_worked= "00:00";
}
$display .= "<tr>
<td bgcolor=\"#DDDDDD\">$time_info[user_firstname] $time_info[user_lastname]</td>
<td bgcolor=\"#DDDDDD\">".date("d-m-y", $time_info[date])."</td>
<td bgcolor=\"$in_bg\">$d_time_in</td>
<td bgcolor=\"$out_bg\">$d_time_out</td>
<td bgcolor=\"#DDDDDD\">$d_time_worked</td>
</tr>";
}
$display .= "</table>";
}

0

Решение

Трудно сказать, где проблема.

Но попробуйте протестировать последний блок и прокомментировать весь верхний код.

$difference_hours = strtotime($d_time_in) - strtotime($d_time_out);

Установите для этих $ d_time_in и $ d_time_out две постоянные отметки времени.

Если этот код работает хорошо (вы получаете разницу во времени), перейдите к верхнему блоку и проверьте его.

$d_time_in = date("G:i a", $time_info[time_in]);

Та же логика. Тест с двумя предварительно установленными временными метками.

0

Другие решения

Хорошо, пройдя это в 100 раз больше, я нашел решение, вот оно.

$start_timestamp = mktime(0, 0, 0, $_POST[selectMonth], $_POST[selectDay], $_POST[selectYear]);

$end_timestamp = mktime(0, 0, 0, $_POST[selectMonthE], $_POST[selectDayE], $_POST[selectYearE]);

$end_timestamp = $end_timestamp + 86399;

$q1 = "SELECT c.user_id, c.date, c.time_in, c.time_out, u.user_firstname, u.user_lastname
FROM control_time c
LEFT JOIN user u
ON u.user_id = c.user_id
WHERE c.date >= $start_timestamp AND c.date <= $end_timestamp";
$r1 = mysql_query($q1) or die(mysql_error());
$num_rows = mysql_num_rows($r1);

if($num_rows > 0){
$display .= "<table border=\"0\" cellspacing=\"1\" cellpadding=\"4\">

<tr>
<td bgcolor=\"#CCCCCC\"><strong>Usuario</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Fecha</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Ingreso</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Salida</strong></td>
<td bgcolor=\"#CCCCCC\"><strong>Trabajadas</strong></td>
</tr>";
while($time_info = mysql_fetch_assoc($r1)){

if($time_info[time_in] > ($time_info[date]+34200)){
$in_bg = "#F3F781";
}else{
$in_bg = "#DDDDDD";
}
//specify time in
$d_time_in = date("G:i:s", $time_info[time_in]);
$in_time = strtotime($d_time_in);
//specify time out
if($time_info[time_out] == 0){
//if time out is equal to 0 lets set it manually
if(date('w', $time_info[date]) == 6){
//if its saturday
$d_time_out = '15:00:00';
}else{
//if its any other day
$d_time_out = '19:00:00';
}
//convert out hour to time
$out_time = strtotime($d_time_out);
$out_bg = "#F5DA81";
}else{
//if time out != 0
$d_time_out = date("G:i:s", $time_info[time_out]);

//convert out hour to time
$out_time = strtotime($d_time_out);
$out_bg = "#DDDDDD";
}
//see differente between the two
$difference_hours = $out_time - $in_time;

if($difference_hours > 0){
//show how many hours worked
$d_time_worked = gmdate("H:i:s", $difference_hours);;
}else{
$d_time_worked= "00:00";
}
$display .= "<tr>
<td bgcolor=\"#DDDDDD\">$time_info[user_firstname] $time_info[user_lastname]</td>
<td bgcolor=\"#DDDDDD\">".date("d-m-y", $time_info[date])."</td>
<td bgcolor=\"$in_bg\">$d_time_in</td>
<td bgcolor=\"$out_bg\">$d_time_out</td>
<td bgcolor=\"#DDDDDD\">$d_time_worked</td>
</tr>";
}
$display .= "</table>";
}

спасибо всем за помощь!

0

По вопросам рекламы [email protected]