Всем привет. Делаю таймер рабочего времени на php. И иногда скрипт делает не то что нужно, я так думаю что вся проблема в том что я суммирую и вычитаю метки времени через
time()
, но не уверен так ли это, Может промежутки времени нужно считать по другому?, выкладываю часть кода который я использую для продолжения работы когда таймер находиться на паузе, и в коде можно увидеть как я делаю расчеты времени. Например
$new_times = time() - time("Предыдущая метка времени");
Иногда находил в нете подобные примеры
$diff = strtotime ("25-08-2011 17:31:17")-strtotime ("25-08-2011 17:30:30");
echo sprintf('%02d:%02d:%02d', $diff / 3600, ($diff % 3600) / 60, $diff % 60);
и думаю может правильно будет делать через strtotime?
Прошу подсказать верно ли я это делаю и если нет то ткнуть носом)
$id_user_session = $_SESSION["id_user"];
$time = time();
$date = date('Y-m-d');
$start_user_timeline_start = $db->get("timecontrol-timeline", [
"time",
],[
'AND' =>[
"id_user"=> $id_user_session,
"status" => "Старт",
"date"=>$date,
]
]);
//берем все Паузы
$start_user_timeline_pause = $db->get("TimeControl_TimePeriods", [
"time",
],[
'AND' =>[
"id_user"=> $id_user_session,
"status" => "Пауза",
"date"=>$date,
]
]);
//время перерыва
$new_times = $time - $start_user_timeline_pause["time"];
//если в таблице для графика есть пауза то берем её и добавляем новое время паузы
if ($db->has("timecontrol-timeline", [
"AND" => [
"id_user" => $id_user_session,
"status" => "Пауза",
"date" => $date,
]
])) {
$about_user_pas = $db->get("timecontrol-timeline", [
"time",
],[
'AND' =>[
"id_user"=> $id_user_session,
"status"=> "Пауза",
"date"=>$date,
]
]);
$new_times = $new_times + $about_user_pas["time"];
//делаем обновление(добавление) строки пауза в таблицу
$update_user_timeline = $db->update(
'timecontrol-timeline',
[
"time"=>$new_times,
],
[
'AND' =>[
"id_user"=> $id_user_session,
"status"=> "Пауза",
"date"=>$date,
]
]
);
$full_timeline = $db->insert("TimeControl_FullTimeline", [
"id"=> $id_user_session,
"status"=> "Пауза",
"time"=>$new_times,
"date"=>$date,
]);
} else {
//делаем запись строки пауза в таблицу
$update_insert_user_timeline = $db->insert("timecontrol-timeline", [
"id_user"=> $id_user_session,
"status"=> "Пауза",
"time"=>$new_times,
"date"=>$date,
]);
$full_timeline = $db->insert("TimeControl_FullTimeline", [
"id"=> $id_user_session,
"status"=> "Пауза",
"time"=>$new_times,
"date"=>$date,
]);
}
//время которое прошло от начала старта до начала старта (нажатие кнопки ПРОДОЛЖИТЬ)
$work_h = $time - $start_user_timeline_start["time"];
//чысто рабочее время
$time_work_h = $work_h - $new_times;
$time_w_h = $time - $time_work_h;
$update_user_timeline = $db->update(
'TimeControl_TimePeriods',
[
"time"=>$time_w_h,
],
[
'AND' =>[
"id_user"=> $id_user_session,
"status"=> "Старт",
"date"=>$date,
]
]
);
$full_timelinse = $db->insert("TimeControl_FullTimeline", [
"id_user"=> $id_user_session,
"status"=> "Старт",
"time"=>$time_w_h,
"date"=>$date,
]);
$db->delete("TimeControl_TimePeriods", [
"AND" => [
"id_user"=> $id_user_session,
"status" => "Пауза",
"date"=>$date,
]
]);