Sos Php :p

Simao!

Power Member
boas,

e axim, eu tenho um programa (em php) k guarda numa base de dados a hora de entrada e a hora de saida. eu keria calcular kantas horas um funcionario trabalhou durante um determinado mes. algm me poderia ajudar pf?


cumps
 
Última edição:
Podes ter uma coisa assim:

while($res = mysql_fetch_array($request)) {

$total += ($res[0] - $res[1]);
}

em que:

$request é um query a bd que te saca a hora de entrada e saida do genero (select * from tabela where month = 'x')
$res[0] é a hora de entrada e o $res[1] a de saida

Não sei se o código está 100% certo, eu é muito a base do "trial & error", mas uma das ideias pode ser essa.

Cumprimentos
 
boas, talvez com um simples insert ou update à base de dados resolvas a coisa.

basta teres em conta a variável necessária para que o 'if' corra para um lado para o outro, se trabalhares com session deverás conseguir o pretendido.

abraço,
 
Como é que tu guardas as horas de entrada, e as horas de saída?
Com que base de dados estás a trabalhar?

Abraço.

boas,

a data guardo na bd com o ano, mes a dia em campos separados, tipo:
$ano=date("y");
$mes=date("m");
$dia=date("");

depois a hora e obtida atraves de:
$hora=date("H:i:s A");

estou a programar com mysql
 
boas,

a data guardo na bd com o ano, mes a dia em campos separados, tipo:
$ano=date("y");
$mes=date("m");
$dia=date("");

depois a hora e obtida atraves de:
$hora=date("H:i:s A");

estou a programar com mysql

Mas e como estas a guarda a hora ?
Se so guardas o ano, mes e dia, como reconstrois uma data do tipo "2007-06-27 10:45" ?
 
Em vez de guardares em campos separados, devias trabalhar com um campo DateTime.
Ao fazeres uma entrada de um "trabalhador", só marcavas "campo=NOW();", ficando assim com um TimeStamp lá colocado. Com esse TimeStamp, podes sempre somar, subtrair, retirar partes, etc, como se fosse um número normal (não é bem, mas quase).

Altera isso, que se precisares de ajuda não falta aqui gente que te deita a mão.

PS: O MySql tem outro tipo de dados que é o TimeSpan, que é a diferença entre dois TimeStamp's, que provavelmente se adequa mais ao que pretendes. Assim, só tens de somar todos os TimeSpan's de um determinado funcionário, a um determinado mês (entre duas datas), e retornares isso da base de dados já em horas.
Desta forma, pões a sobrecarga toda do lado da base de dados, e executas o que queres apenas num query.
 
Última edição:
Estive a ver uma possível solução para o teu problema, e não se consegue somar campos de DateTime em queries agregados. Pelos vistos não tem o DataType TimeSpan também. Agora fiquei curioso, e vou ter de procurar onde o vi, já que não foi no MySql ;)

Mas podes muito bem usar o TimeStamp, que te cria a representação de um dado instante entre 1970 e 2038, e que suporta funções agregadas como o SUM() ou o AVG().
Assim consegues sempre somar a diferença de todos campos de entrada e saída de uma dado utilizador num determinado intervalo de tempo, e retornar o resultado na unidade que pretenderes, neste caso, em horas.

Abraço.
 
Última edição:
Back
Topo