Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estava desenvolvendo um sistema em que eu cadastrasse uma quantidade de tempo e ele fosse regredindo. Aí encontrei esse porém não funcionou quando eu coloco a listagem da data no banco de dados. Ex: Faltam 27 dias.
<?php
$hoje = date('Y-m-d');
$vencimento = ('SELECT * FROM usuario WHERE data');
$a = explode("-","$vencimento");
$b = explode("-","$hoje");
$antiga= mktime(0, 0, 0, $b[1], $b[2], $b[0]);
$atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]);
$diferenca= $atual-$antiga;
$dias = floor($diferenca/84600);
if($dias=='15') {
echo "<font color=\"blue\">faltam 15 dias</font>";
} elseif($dias=='10') {
echo "<font color=\"blue\">faltam 10 dias</font>";
} elseif($dias=='5') {
echo "<font color=\"blue\">faltam 5 dias</font>";
} else {
echo "faltam $dias";
}
?>
Alguém ajuda? Será que dá pra fazer por esse mesmo?
>
É super fácil com DateTime
Veja
http://rberaldo.com.br/php-usando-a-classe-nativa-datetime/#diff
Mas aí eu teria que alterar o script manualmente a cada nova data que eu cadastrar ou ele buscaria em meu banco de dados a data e faria a contagem? Que vai dá a mesma coisa com o script que uso!
Você pode buscar no banco, claro. Mas precisa executar a consulta. Seu script só cria a string da SQL.
Veja: http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/
E outra: se a intenção é pegar somente registros com intervalo igual a 15 dias, pode fazer isso com as Funções de Data e Hora do próprio SGBD, na própria consulta
Acho que você não entendeu. Então se eu cadastro uma data "24/09/2016" ou cadastro um número "50" eu quero que ele diminua com o passar dos dias. Cadastrar eu já cadastrei a questão é só como vou obter esse resultado de "Faltam 06 dias para". Então se eu jogar:
<? "$variavel = 'SELECT *, TIMESTAMPDIFF(DAY, NOW(), LinhaComAdata) AS dias_restantes FROM MinhaTabela'; ?>
Como daria procedimento? E é isso mesmo?
>
Você pode buscar no banco, claro. Mas precisa executar a consulta. Seu script só cria a string da SQL.
Veja: http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/
E outra: se a intenção é pegar somente registros com intervalo igual a 15 dias, pode fazer isso com as Funções de Data e Hora do próprio SGBD, na própria consulta
Você quer que o 50 vire 49, 48, 47 etc? Pra quê? É melhor salvar as datas de início e fim, que são fixas, que ficar rodando UPDATE todo dia em diversos registros
Assim basta selecionar as duas datas e usar DateTime, ou, ainda melhor, calcular a diferença na própria consulta SQL
Verdade caro Beraldo, mas como eu calculo a diferença na consulta sql, aquele tuto que postou anteriormente não saiu certo! Você poderia postar mais ou menos como fica só pra eu testar aqui tbm e quem tiver acompanhando o tópico ficar ligado?
>
Você quer que o 50 vire 49, 48, 47 etc? Pra quê? É melhor salvar as datas de início e fim, que são fixas, que ficar rodando UPDATE todo dia em diversos registros
Assim basta selecionar as duas datas e usar DateTime, ou, ainda melhor, calcular a diferença na própria consulta SQL
SELECT DATEDIFF(coluna_com_a_data, curdate())
as 'quantosdiasfaltam' from tabela;Use DATEDIFF, como o Fernando C citou
Lembrando que todas as funções de data e hora estão documentadas aqui:
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_datediff
Por favor, verifiquem!!
<?php
$query = "SELECT DATEDIFF(data, curdate())
as 'dias restantes' from usuario";
if(is_array($estoque = returnArray($query))){
foreach ($estoque as $k => $v){
if($estoque[$k]['dias restantes']>0){
$estoque[$k]['msg'] ='Faltam' .$estoque[$k]['dias restantes'].'dias';$estoque[$k]['msg'] = 'Vence hoje chefe!';
}
}
geraLista($estoque);
}
?>Por favor, verifiquem!!
Função não definida!!!
http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_func
Ele exibe a escrita "SELECT DATEDIFF(data, curdate())
AS dias restantes FROM usuario" rsrsrss.
Por favor me ajudem a identificar o erro ou me mostrem algum que apareça "Faltam 9 dias" com data cadastrada no banco de dados mysql.
<?php
$query = 'SELECT DATEDIFF(data, curdate())
AS dias restantes FROM usuario';
if(is_array($estoque = ($query))){
foreach ($estoque as $k => $v){
if($estoque[$k]['dias restantes']>0){
$estoque[$k]['msg'] ='Faltam' .$estoque[$k]['dias restantes'].'dias';
}elseif($estoque[$k]['dias restantes']<0){
$estoque[$k]['msg']='Venceu a'.-$estoque[$k]['dias restantes'].' dias';
}else{
$estoque[$k]['msg'] = 'Vence hoje chefe!';
}
}
}
echo($estoque);
?>Isto não faz sentido algum:
if(is_array($estoque = ($query))){
Veja exemplos de is_array() aqui
Já aqui você apenas cria uma string SQL, sem executá-la:
$query = 'SELECT DATEDIFF(data, curdate())
Primeiro entenda como executar consultas em bancos de dados. Leia sobre Sistemas de Cadastro, que tudo ficará mais claro.
Veja:
http://forum.imasters.com.br/topic/192408-sistema-de-cadastro-em-phpmysql/
http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/
Então Beraldo, eu li e fiz mais ou menos isso aqui, só que dá erro na conexão e não consigo identificar, tem como me ajudar por favor?
<?
$sql = "SELECT *, DATEDIFF(BancoDeDadosComAData, CURDATE()) dias_para_vencimento FROM TabelaUsada
WHERE status2 <> 'Fechado'
AND dias_para_vencimento >= 0
ORDER BY dias_para_vencimento";
$resultado = mysql_query($sql) or die ("Erro na consulta"); $dias = $linha['dias_para_vencimento'];
echo $dias . '<br>';
} ?>Use a função mysql_error(), como mostrado neste tópico
$resultado = mysql_query($sql) or die ("Erro na consulta: " . mysql_error() );
PS: funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql
Feita essa correção, funcionou perfeitamente!! Desde já agradeço :)
Funcionou ok!! Porém está exibindo a lista com todas as datas ao invés de aparecer somente a do usuário especifico que fez o logon. Você pode me ajudar nesse detalhe?
<?
$sql = "SELECT *, DATEDIFF(data, CURDATE()) AS 'dias_para_vencimento' FROM usuario
WHERE data <> 'login'";
$resultado = mysql_query("$sql") or die( mysql_error() );
while ($linha = mysql_fetch_assoc($resultado)) {
$dias1 = $linha['dias_para_vencimento'] ;
echo "faltam $dias1 dias";
} ?>
>
Use a função mysql_error(), como mostrado neste tópico
$resultado = mysql_query($sql) or die ("Erro na consulta: " . mysql_error() );
PS: funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql
Seu WHERE precisa filtrar também pelo ID do usuário logado. Esse ID deve estar na session ou cookie (depende de como você fez seu sistema de login)
É super fácil com DateTime
Veja
http://rberaldo.com.br/php-usando-a-classe-nativa-datetime/#diff