Ir para conteúdo

POWERED BY:

Arquivado

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

Remazela

PHP - Calcular e encontrar a Hora Atual

Recommended Posts

Caros amigos

 

Preciso tirar uma dúvida, que não estou conseguindo solucionar.

 

Tenho que calcular e encontrar a hora atual, por exemplo:

- o anúncio foi aberto no dia...: 25/04/2018 às 10:00:00

- o anúncio irá encerrar no dia: 03/05/2018 às 16:00:00

 

Como faço para calcular e comparar a DATA/HORA de ENCERRAMENTO com a data e hora atual, pois quando faço o cálculo o sistema pega apenas a data.

 

Abaixo o código que uso para calcular as horas, calcula a diferença normal.

/*
	 Campos criado na Tabela 
	  `dataIniciada` DATE NOT NULL ,
	  `horaIniciada` TIME NOT NULL ,
	  `dataFinalizada` DATE NOT NULL ,
	  `horaFinalizada` TIME NOT NULL 
*/

  <?php 
      //Variáveis
		$hrsInc = $horaIniciada;
		$hrsFim = $horaFinalizada;

		//Separa Hora e Minutos
		  $hrsInc = explode( ':', $hrsInc );
		  $hrsFim = explode( ':', $hrsFim );

		//Obtém a ordem Hora/Minuto.
		  $hrIni = mktime( $hrsInc[0], $hrsInc[1]);
		  $hrFim = mktime( $hrsFim [0], $hrsFim [1]);

		//Verifica a dirença entre os horários
		  $hrsDif = $hrFim - $hrIni;
		
		//Imprime a diferença
          echo "A diferença é de ".date('H:i:s',$hrsDif );
  
  ?>

 

Gostaria que o sistema quando chegasse no dia 03/05/2018 só encerra-se quando fosse realmente 16:00:00.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode mudar o formato da data de: 25/04/2018 10:00:00 para 2018-04-25 10:00:00

 

E desta forma, utilizar esse código:

 

<?php 

$date1 = new DateTime('2018-04-25 10:00:00');
$date2 = new DateTime('2018-05-03 16:00:00');

$diff = $date2->diff($date1);

echo $diff->format('%a dia(s) e %h hora(s)');

 

21 minutos atrás, Remazela disse:

Gostaria que o sistema quando chegasse no dia 03/05/2018 só encerra-se quando fosse realmente 16:00:00.

 

E para isto, você precisa verificar se sua hospedagem ou servidor trabalha com tarefas cron (cron jobs). :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você apenas precisa exibir se o anúncio está aberto no momento. Pode utilizar uma comparação simples (segue a mesma linha que o @Jhess, mas com compração simples).

$start = new DateTime('2018-04-25 10:00:00');
$end = new DateTime('2018-05-03 16:00:00');

//sem passar nenhum parâmetro, utiliza a data do servidor
$now = new \DateTime();

if ($now >= $start && $now < $end)
{
    //Anúncio no período válido
}

Como o objeto DateTime aceita strict comparison (utilizando os operadores de comparação básicos), fica fácil comparar.

 

Caso seja algo vindo do banco de dados, pode utilizar a validação na própria consulta.

SELECT * FROM advertising WHERE NOW() BETWEEN start AND end

A função NOW() também retorna a data atual, conforme a configuração do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Gabriel

 

por favor me explicar melhor essa parte:

<?php
    //nessa parte vou trazer do Banco de Dados MySql
      $start = new DateTime('2018-04-25 10:00:00');
      $end = new DateTime('2018-05-03 16:00:00');

    //sem passar nenhum parâmetro, utiliza a data do servidor
      $now = new \DateTime();

      if ($now >= $start && $now < $end){
          //Anúncio no período válido
      }
                                  
?>

Como devo informar minhas variáveis nessa linhas:

$start = new DateTime('2018-04-25 10:00:00');
$end = new DateTime('2018-05-03 16:00:00');

Seria assim:

$start = new DateTime('d/m/Y', $dataIniciada);
$end = new DateTime('d/m/Y', $dataFinalizada);

Mas em relação ao horário, como faço ?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se suas datas estiverem no padrão ISO-9075 (YYYY-MM-DD HH:II:SS), basta fazer:

$start = new \DateTime( $dataIniciada );
$end = new \DateTime( $dataFinalizada );

 

Se estiverem no padrão brasileiro, faça assim:

$start = DateTime::createFromFormat( 'd/m/Y H:i:s', $dataIniciada );
$end = DateTime::createFromFormat( 'd/m/Y H:i:s', $dataFinalizada );

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos.

 

Fiz desta forma abaixo, a princípio atingi o objetivo, não sei se é o correto, caso não seja, por favor pode me orientar.

 

<?php

                        if($anuncioStatus == '1'){
                          
                            //Pego o formato Brasileiro
                            date_default_timezone_set('America/Sao_paulo');
                            
                            //Calcula a Data Final com a Data Atual
                              $data_atual = date("Y-m-d");
                              $data_atual = strtotime($data_atual);
                              $dataFim    = strtotime($anuncioDtFim);
                              $diferenca  = $data_atual - $dataFim;
                              $dias       = floor($diferenca / 86400);
                              $faltaDias  = "{$dias}";
                            
                            //Calcula a Hora Final com a Hora Atual
                              $hora_atual = date("H:i:s");
                              $hora_atual = strtotime($hora_atual);                              
                              $horaFim    = strtotime($anuncioHrsFim);
                              $diferenca  = $hora_atual - $horaFim;
                              $hora       = floor($diferenca / 3600);
                              $minutos    = floor(($diferenca / 60) % 60);
                              $segundos   = floor($diferenca % 60);
                              $faltaHora  = "{$hora}:{$minutos}:{$segundos}";  


                              if ($faltaDias == '0' && $faltaHora >= '0') {
                                  $anuncioStatus = '2'; 
                                  $sql_anuncio = 'UPDATE anuncio SET anuncioStatus = :anuncioStatus WHERE anuncioId = :anuncioId';
                                   
                                  try{
                                    $query_anuncio = $conecta->prepare($sql_anuncio);                       
                                    $query_anuncio->bindValue(':anuncioStatus',$anuncioStatus,PDO::PARAM_STR);
                                    $query_anuncio->bindValue(':anuncioId',$anuncioId,PDO::PARAM_STR);                   
                                    $query_anuncio->execute();

                                    } catch(PDOexception $error_novoAnuncio) {
                                    echo 'Erro ao Editar o Anuncio '.$error_novoAnuncio->getMessage();
                                    }     
                                
                              }                                                     

                          }

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A forma que você fez não utiliza nenhum dos exemplos fornecidos. Além de serem necessários vários cálculos, a comparação de $faltaHora sempre dará true, veja:

var_dump('00:00:10' >= 0); // true
var_dump('01:00:10' >= 0); // true

Utilize os exemplos fornecidos. Tente implementar, caso não consiga, traga a sua dificuldade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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