1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sos Php :p

Discussão em 'Web Development' iniciada por Simao!, 27 de Junho de 2007. (Respostas: 8; Visualizações: 720)

  1. Simao!

    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: 27 de Junho de 2007
  2. Crisis

    Crisis Power Member

    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
     
  3. Arh!!!

    Arh!!! Power Member

    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.
     
  4. scroll

    scroll Power Member

    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,
     
  5. Simao!

    Simao! Power Member

    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
     
  6. mcog_blaster

    mcog_blaster Power Member

    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" ?
     
  7. Arh!!!

    Arh!!! Power Member

    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: 29 de Junho de 2007
  8. Arh!!!

    Arh!!! Power Member

    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: 29 de Junho de 2007
  9. Arh!!!

    Arh!!! Power Member

    Afinal foi no Postgres que vi TimeSpan data type.
     

Partilhar esta Página