serg_small_developer
@serg_small_developer
Начинающий прогер

Как сделать таймер рабочего времени?

Всем привет. Делаю таймер рабочего времени на 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,
                ]
            ]);
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
serg_small_developer
@serg_small_developer Автор вопроса
Начинающий прогер
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы