Ir para conteúdo

Arquivado

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

marcelookada

Calcular dias entre datas com "While"

Recommended Posts

Boa tarde, gostaria de saber se tem como calcular datas com resultados que vem de uma select que são distribuídos em lista.

 

$sqlg2 = new Query($bd);
$txtg2 = "SELECT * FROM (SELECT DEMISGUIA   FROM HSSGUIA WHERE NNUMEGUIA = :guias) WHERE ROWNUM = 1";
$sqlg2->addParam(':guias',$guias);
$sqlg2->executeQuery($txtg2);
				
while(! $sqlg2->eof()){
$data11 	= $sqlg2->result("DEMISGUIA");
$tpl->DIAS = $data11;
$sqlg2->next();
}		
    RAFAELA 28/09/17        
    RAFAELA  18/10/17        
    RAFAELA 23/10/17        
    RAFAELA  01/11/17        
    RAFAELA  06/11/17        
    RAFAELA  23/11/17        
    o calculo seria feito na data que for acima  de uma para outra        

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa amigão,

Tenta usar a função mktime.

 

function geraTimestamp($data) {
	$partes = explode('-', $data);
	// mktime (hora, minuto, segundo, mês, dia, ano)
	return mktime(0, 0, 0, $partes[1], $partes[2], $partes[0]);
}

$dtInicial 	= geraTimestamp("2017-12-01");
$dtFinal 	= geraTimestamp("2017-12-18");

// Calcula a diferença entra as duas datas
$diferenca = $dtFinal - $dtInicial;

// Calcula a diferença de dias
$dias = (int)floor( $diferenca / (60 * 60 * 24));

echo 'A diferença é de: ' . $dias . ' dia(s)';

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

RAFAELA   28/09/17
RAFAELA   18/10/17  = 21 dias 
RAFAELA   23/10/17 = 5 dias
RAFAELA   01/11/17 = 9 dias
RAFAELA   06/11/17 = 5 dias
RAFAELA   23/11/17 = 17 dias

 

todas elas comparando com a data de cima.

 

ve se conseguir passar para vcs o que eu quero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa amigão,

 

Fim um teste aqui para dar o mesmo resultado que você postou. Da uma olhada e vê se resolve seu problema.

 

<?php

function geraTimestamp($data) {
	$partes = explode('-', $data);
	// mktime (hora, minuto, segundo, mês, dia, ano)
	return mktime(0, 0, 0, $partes[1], $partes[2], $partes[0]);
}

function calcDias($dtInicial, $dtFinal) {

	$dtInicial 	= geraTimestamp($dtInicial);
	$dtFinal 	= geraTimestamp($dtFinal);
	
	// Calcula a diferença entra as duas datas
	$diferenca = $dtFinal - $dtInicial;
	
	// Calcula a diferença de dias
	$dias = (int)floor( $diferenca / (60 * 60 * 24));
	
	return $dias;
}

// Aqui eu só carreguei os dados
$arrDatas = array();

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-09-28');
$arrDatas[] = $arrDt;

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-10-18');
$arrDatas[] = $arrDt;

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-10-23');
$arrDatas[] = $arrDt;

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-11-01');
$arrDatas[] = $arrDt;

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-11-06');
$arrDatas[] = $arrDt;

$arrDt = array('nome' => 'RAFAELA', 'dt' => '2017-11-23');
$arrDatas[] = $arrDt;

$count = 0;
$dtInicial 	= '0000-00-00';
$dtFinal 	= '0000-00-00';
foreach($arrDatas as $key => $value) {
	if ($count === 0) {
		$dtInicial = $value['dt'];
		$dtFinal   = $value['dt'];
	} else {
		$dtInicial = $dtFinal;
		$dtFinal   = $value['dt'];
	}
	
	$difDias = calcDias($dtInicial, $dtFinal);
	
	echo $value['nome'] . ' ' . $value['dt'] . ' ' . $difDias . ' dia(s)';
	echo '<br>';
	
	$count += 1;
}

/*
RAFAELA 2017-09-28 0 dia(s)
RAFAELA 2017-10-18 20 dia(s)
RAFAELA 2017-10-23 5 dia(s)
RAFAELA 2017-11-01 9 dia(s)
RAFAELA 2017-11-06 5 dia(s)
RAFAELA 2017-11-23 17 dia(s)
*/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$Data1 = new \DateTime( '2017-01-01' );
$Data2 = new \DateTime( '2017-05-05' );

printf(
    '%d dias de diferença entre %s e %s',
    $Data1->diff( $Data2 )->days,
    $Data1->format( 'd/m/Y' ),
    $Data2->format( 'd/m/Y' )
);

//Resultado: 124 dias de diferença entre 01/01/2017 e 05/05/2017

DateTime::diff

DateInterval

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por iguulima
      Bom dia a todos, tenho em meu banco de dados uma tabela de pedidos, onde nesse pedidos estão salvos as id's dos produtos que foram selecionados pelo usuário, gostaria de saber se tem alguma forma utilizando um while que possa selecionar os produtos mais pedidos dessa tabela, não tenho ideia por onde começar. Consigo listar todos apenas mas não sei como selecionar os que são mais pedidos.
    • Por iguulima
      Ola a todos,
      Estou com uma dúvida e ja tentei de tudo que estão dentro das minhas limitações de conhecimento. Tenho um laço de repetição While sendo executado e quero que uma Variavel seja executada apenas uma vez dentro desse laço. Existe essa possibilidade. Obrigado a todos. Segue o código:

       
      <?php $consult = $row['id']; $sql = "SELECT * FROM upload_data WHERE USER_CODE = '$consult' ORDER BY id ASC"; $resultadoimg = mysql_query($sql); $numero_registros = mysql_num_rows($resultadoimg); while($registrosimg = mysql_fetch_array($resultadoimg)) { ?> <li data-target="#carousel-custom" data-slide-to="0" <?php ele precisa ser executado uma unica vez aqui?>><img src="" alt=""></li> <?php } ?>  
    • Por mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • Por eduardodsilvaq
      Não sei oq tem de errado.
       
      O erro:
      Notice: Undefined index: name in C:\AppServ\www\includes\functions.php on line 105 A linha do erro:
      <td width="106"><div class="fonte">'. $row["name"] .'</div></td> O codigo:
      function mini_ranking (){ $PDO = db_connect_gamedata(); $sql = "SELECT name baselevel FROM u_hero WHERE class <> '80' ORDER BY baselevel Desc Limit 6"; $result = $PDO->query($sql); $guild = $result->fetchAll(PDO::FETCH_ASSOC); $i = 1; echo '<table width="153" height="0" border="0">'; foreach($guild as $row) { echo '<tr> <td width="0" height="0" align="center"><div class="fonte">'. $i++ . '</div></td> <td width="106"><div class="fonte">'. $row["name"] .'</div></td> <td width="20"><div class="fonte">'. $row["baselevel"] .'</div></td> <tr>'; } echo '</table>'; }  
    • Por danilo759
      Estou precisando saber o percentual de imagens que está no diretório e estou com dificuldades. Alguém pode me ajudar dar uma luz?

       
      $qry_canal = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal IN('HBO','GLO','TNT') GROUP BY dados.titulo"); $counter = 0; while($rows = $qry_canal->fetch(PDO::FETCH_ASSOC)){ $id = $rows['id']; $sigla = $rows['canal']; $sk = substr($rows['sk'], 0, 14); // Busca total de programas por canal /* ---------------------------------------------------------------- */ $qry_b = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal LIKE '".$sigla."' GROUP BY dados.titulo"); $total_programas = $qry_b->rowCount(); if(empty($serieskey)) { $prog_id = "$id"; } else{ $prog_id = "$sk"; } // VERIFICA SE EXISTE IMAGEM /* ---------------------------------------------------------------- */ if(file_exists("/imagens/".$prog_id."_epg.jpg")){ $arr_img[] = "".$counter++.""; } $total_fotos = "".count($arr_img).""; echo "".($total_fotos * 100 ) / $total_programas."% <br />"; }  
×

Informação importante

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