Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sileno De Oliveira Brito

Calcular um intervalo de tempo a partir de uma data

Recommended Posts

Boa noite, tenho a seguinte situação tenho várias datas formato d/m/Y H:i:s e a partir dela uma duração em segundos que varia muito.

 

Eu preciso saber quantos segundos se passaram em um terminado período de tempo. Por exemplo

 

03/12/1984 9:00:00 com duração de duas horas (7200 segundos), a minha situação seria a seguinte:

 

a) No intervalo de 03/12/1984 10:10:00 até 03/12/1984 11:00:00, quanto tempo teria se passado?

R. 3000 segundos.

B) No intervalo de 03/12/1984 23:10:00 até 04/12/1984 02:15:00, quanto tempo teria se passado?

R, 0 segundos.

 

Estou precisando trabalhar com a intercessão de datas, há comandos em PHP que possibilitem isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a classe DateTime

 

class TimeAgo extends DateTime
{
    /**
     * Armazena os tempos
     * @var array 
     */
    private $_times = array(
        array( 'time' => 31104000, 'text' => 'y' ),
        array( 'time' => 2592000, 'text' => 'm' ),
        array( 'time' => 86400, 'text' => 'd' ),
        array( 'time' => 3600, 'text' => 'h' ),
        array( 'time' => 60, 'text' => 'i' ),
        array( 'time' => 1, 'text' => 's' ),
    );
    /**
     * Calcula a diferença de tempo entre duas datas
     * @param DateTime $relativeTo A data para calcular a diferença
     * @return int A diferença de tempo entre as datas 
     */
    public function formattedInterval( DateTime $relativeTo = null )
    {
        $diff    = ( array ) $this->diff( $relativeTo );
        $seconds = 0;
        
        foreach( $this->_times as $time )
        {
            $seconds += ( $time[ 'time' ] * $diff[ $time[ 'text' ] ] );            
        }
        
        return $seconds;
    }
}

$time = new TimeAgo( '1984-12-03 10:10:00' );
echo $time->formattedInterval( new Datetime( '1984-12-03 12:00:00' ) ); // 6600

Compartilhar este post


Link para o post
Compartilhar em outros sites

só converter suas data em segundos e pegar o intervalo do tempo.

tipo isso:

$timestamp_inicial = strtotime('1984-12-03 11:00:00');
$timestamp_final = strtotime('1984-12-03 11:00:45');

$segundos_iniciais = (($timestamp_inicial * 60) /60);
$segundos_finais = (($timestamp_final * 60) /60);


$intervalo_segundos = $segundos_finais - $segundos_iniciais;

echo $intervalo_segundos;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.