sou iniciante em programação com PHP e estou tentando fazer um calculo porem, meu código calcula e grana no banco de dados a hora errada.
vou deixar meu código abaixo e espero que alguém me ajude .
foreach ($fieldsToUpdate as $field) {
if (empty($row[$field])) {
$fieldToUpdate = $field;
break;
}
}
if ($fieldToUpdate !== null) {
// Obter a data e hora atual no fuso horário de Brasília
$now = new DateTime("now", new DateTimeZone("America/Sao_Paulo"));
$dataHora = $now->format("Y-m-d H:i:s");
// Atualiza o campo com a hora no fuso horário de Brasília
$updateQuery = "UPDATE registros_ponto SET $fieldToUpdate = :dataHora WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$updateStatement = $pdo->prepare($updateQuery);
$updateStatement->bindParam(':matricula', $matricula);
$updateStatement->bindParam(':dataHora', $dataHora);
$updateStatement->execute();
// Verificar se há atraso com base na tolerância
if ($horasAtrasoSegundos > 0) {
$horasAtraso = gmdate("H:i:s", $horasAtrasoSegundos);
} else {
$horasAtraso = ""; // "00:00:00" Não há atraso
}
Pergunta
Weslley Brum
Boa tarde a todos,
sou iniciante em programação com PHP e estou tentando fazer um calculo porem, meu código calcula e grana no banco de dados a hora errada.
vou deixar meu código abaixo e espero que alguém me ajude .
<?php
include('includes/db_config.php');
// Inicializar a variável $result
$result = "";
$data = json_decode(file_get_contents("php://input"), true);
if (isset($data['matricula']) && isset($data['nextField'])) {
$matricula = $data['matricula'];
$nextField = $data['nextField'];
try {
// Configuração do fuso horário para Brasília
date_default_timezone_set('America/Sao_Paulo');
$query = "SELECT * FROM registros_ponto WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$statement = $pdo->prepare($query);
$statement->bindParam(':matricula', $matricula);
$statement->execute();
if ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$fieldsToUpdate = ['entrada1', 'saida1', 'entrada2', 'saida2'];
$fieldToUpdate = null;
foreach ($fieldsToUpdate as $field) {
if (empty($row[$field])) {
$fieldToUpdate = $field;
break;
}
}
if ($fieldToUpdate !== null) {
// Obter a data e hora atual no fuso horário de Brasília
$now = new DateTime("now", new DateTimeZone("America/Sao_Paulo"));
$dataHora = $now->format("Y-m-d H:i:s");
// Atualiza o campo com a hora no fuso horário de Brasília
$updateQuery = "UPDATE registros_ponto SET $fieldToUpdate = :dataHora WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$updateStatement = $pdo->prepare($updateQuery);
$updateStatement->bindParam(':matricula', $matricula);
$updateStatement->bindParam(':dataHora', $dataHora);
$updateStatement->execute();
// Calcular horas trabalhadas
$entrada1 = strtotime($row['entrada1']);
$saida1 = strtotime($row['saida1']);
$entrada2 = strtotime($row['entrada2']);
$saida2 = strtotime($row['saida2']);
// Calcular as durações dos períodos
$duracao1 = $saida1 - $entrada1;
$duracao2 = $saida2 - $entrada2;
// Calcular as horas trabalhadas
$horasTrabalhadasSegundos = $duracao1 + $duracao2;
$horasTrabalhadas = gmdate("H:i:s", $horasTrabalhadasSegundos);
// Calcular horas de atraso
$jornadaTrabalhoSegundos = strtotime("09:00:00");
$horasAtrasoSegundos = $jornadaTrabalhoSegundos - $horasTrabalhadasSegundos;
// Verificar se há atraso com base na tolerância
if ($horasAtrasoSegundos > 0) {
$horasAtraso = gmdate("H:i:s", $horasAtrasoSegundos);
} else {
$horasAtraso = ""; // "00:00:00" Não há atraso
}
// Calcular horas extras
$horasExtrasSegundos = max($horasTrabalhadasSegundos - $jornadaTrabalhoSegundos, 0);
$horasExtras = gmdate("H:i:s", $horasExtrasSegundos);
// Atualizar o campo horas_trabalhadas
$updateHorasQuery = "UPDATE registros_ponto SET horas_trabalhadas = :horasTrabalhadas WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$updateHorasStatement = $pdo->prepare($updateHorasQuery);
$updateHorasStatement->bindParam(':matricula', $matricula);
$updateHorasStatement->bindParam(':horasTrabalhadas', $horasTrabalhadas);
$updateHorasStatement->execute();
// Atualizar o campo horas_atraso
$updateAtrasoQuery = "UPDATE registros_ponto SET horas_atraso = :horasAtraso WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$updateAtrasoStatement = $pdo->prepare($updateAtrasoQuery);
$updateAtrasoStatement->bindParam(':matricula', $matricula);
$updateAtrasoStatement->bindParam(':horasAtraso', $horasAtraso);
$updateAtrasoStatement->execute();
// Atualizar o campo horas_extras
$updateExtrasQuery = "UPDATE registros_ponto SET horas_extras = :horasExtras WHERE matricula = :matricula AND DATE(data_registro) = CURDATE()";
$updateExtrasStatement = $pdo->prepare($updateExtrasQuery);
$updateExtrasStatement->bindParam(':matricula', $matricula);
$updateExtrasStatement->bindParam(':horasExtras', $horasExtras);
$updateExtrasStatement->execute();
// Exibir informações sobre o atraso e horas extras
$result = "<p class='sucesso'>Registro atualizado com sucesso!</p>";
} else {
$result = "Excedeu o número de registros do dia.";
}
}
} catch (PDOException $e) {
$result = "Erro ao salvar registro: " . $e->getMessage();
}
} else {
$result = "Dados de entrada inválidos.";
}
echo $result; // Retorna a mensagem de sucesso ou erro
?>
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.