X Dias
#1
Posted 23/02/2006, 08:34
EX: tenho uma data cadastrada como dd/mm/yyyy.
e gostaria de fazer uma pagina q mostrasse que ia vencer o cadastro dentro d x dias.
EX:
faltam 90 dias
faltam 10 dias
faltam 9 dias
faltam 8 dias etc....
como fazer?
www.aprendendoaamar.com
#2
Posted 23/02/2006, 08:42
vc já rabiscou algo no papel que possa te ajudar a resolver o problema? conte tudo o que vc imaginou pra isso até agora pra gente te ajudar com base no que vc já mentalizou
๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑
#3
Posted 23/02/2006, 08:44
Mas deu certo nao, se for mais facil me de um toque usando campos separado para d m y mesmo
www.aprendendoaamar.com
#4
Posted 23/02/2006, 12:06
E adicione X datas a data formatada com DATE_ADD() e compare com a data da tabela na claúsula WHERE.
Obs.: Já mostrei esse processo aqui no fórum.
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#5
Posted 23/02/2006, 15:54
me chinga nao huahueaSe quiser fazer na própria query todo o trabalho, transforme a data para o formato BR com: LEFT(), RIGHT e SUBSTRING().
E adicione X datas a data formatada com DATE_ADD() e compare com a data da tabela na claúsula WHERE.
Obs.: Já mostrei esse processo aqui no fórum.
seja mais especifico
www.aprendendoaamar.com
#6
Posted 23/02/2006, 17:08
// Funções que convertem as Datas e Horas para o DB e para a Página function DataParaDB($data) { list($dia,$mes,$ano)=explode("/",$data); if (strlen($dia)==1) $dia="0$dia"; if (strlen($mes)==1) $mes="0$mes"; $datadb = "$ano$mes$dia"; return $datadb; } function DataDoDB($data) { if (strlen($data)!=0) { $dia = substr($data,6,2); $mes = substr($data,4,2); $ano = substr($data,0,4); $datadb = "$dia/$mes/$ano"; return $datadb; } } // Função que retorna o intervalo entre datas (em dias) function conta_dias($data_de,$data_a) { if ($data_de) { if (!strstr($data_de,"/")) $data_de=DataDoDB($data_de); } else { $data_de=date("d/m/Y"); } if ($data_a) { if (!strstr($data_a,"/")) $data_a=DataDoDB($data_a); } else { $data_a=date("d/m/Y"); } list($dia_de,$mes_de,$ano_de) = explode("/",$data_de); list($dia_a,$mes_a,$ano_a) = explode("/",$data_a); $timestamp1=mktime (0, 0, 0, $mes_de, $dia_de, $ano_de); $timestamp2=mktime (0, 0, 0, $mes_a, $dia_a, $ano_a); return number_format((($timestamp1-$timestamp2)/86400),0); } // Função que retorna a data futura (dd/mm/aaaa) function acha_data($data,$dias) { if ($data) { if (!strstr($data,"/")) $data=DataDoDB($data); } else { $data=date("d/m/Y"); } list($dia,$mes,$ano) = explode("/",$data); $timestamp = mktime(0, 0, 0, $mes, $dia+$dias, $ano); return date("d/m/Y",$timestamp); }
Edição feita por: Rodrigo, 23/02/2006, 17:09.
#7
Posted 23/02/2006, 17:34
Eu trabalho com Oracle, fiz uma procedure em pl/sql para ver os dias q faltam pro aniversario da pessoa hj...
PROCEDURE RETORNA_DIA_ANIVERSARIO (RDIAS IN OUT DIA_C) IS
BEGIN
OPEN RDIAS FOR
SELECT TO_CHAR(DT_ANIVERSARIO, 'DD') - TO_CHAR(SYSDATE, 'DD')
FROM TB_PESSOAS
WHERE TO_CHAR(DT_ANIVERSARIO, 'MM/YYYY') = TO_CHAR(SYSDATE, 'MM/YYYY')
AND TO_CHAR(DT_ANIVERSARIO, 'DD') >= TO_CHAR(SYSDATE, 'DD');
END RETORNA_DIA_ANIVERSARIO;
Vc pode pegar a ideia da procedure e adequar para o banco q vc usa...
No caso ai eu peguei soh do mês... mas vc pode adequar ai tb ateh qto tempo antes vc precisa e talz
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)
Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti
#8
Posted 23/02/2006, 19:18
Transformar a data do BD do formato português para inglês:
CONCAT(RIGHT(data, 4), '-', SUBSTRING(data, 4, 2), '-', LEFT(data, 2))
Obs.: Aonde aparece a palavra `data` nos exemplos que serão dados, está se referindo ao campo que contém a data na tabela.
O que foi feito acima? Foi pego cada parte constituinte de uma data (dia, mês e ano) e concatenado entre hífens .
Tendo assim, uma data no formato inglês, poderemos trabalhar no MySQL com as funções detinadas ao trabalho com DATA/HORA.
Bom, o que precisamos fazer agora é adicionar uma certa quantidade de dias as datas cadastradas na tabela e verifica se batem com o dia atual.
Exemplo:
Se hojé é 2006-02-23, e na tabela temos um data cadastrada no dia 2006-02-20, e no nosso sistema o limite de uso é de 3 dias, basta nós somarmos 3 dias a data cadastrada que veremos que baterá com a data de hoje, tendo assim encerrado a partir de hoje.
Pois bem, como adicionar X data(s) a data da tabela para fazer a verificação?
Simples, no MySQL encontramos a seguinte função:
ADDDATE(data,INTERVAL expr type)
ADDDATE(expr,dias)
Tendo a segunda sintaxe disponível somente para versão a partir de 4.1
Sem problemas, vamos trabalhar com a primeira!
ADDDATE(DATA, INTERVAL 10 DAY)
Aonde DATA é a data que foi formatada, a que está no formato inglês.
Fazendo a substituição fica:
ADDDATE(CONCAT(RIGHT(data, 4), '-', SUBSTRING(data, 4, 2), '-', LEFT(data, 2)), INTERVAL 10 DAY)
Agora precisamos fazer a comparação com a data atual!
ADDDATE(CONCAT(RIGHT(data, 4), '-', SUBSTRING(data, 4, 2), '-', LEFT(data, 2)), INTERVAL 10 DAY) = CURDATE()
Assim obteremos as datas que fazem exatamente 10 dias que estão cadastradas, em relação ao dia corrente.
Lembre-se que a expressão acima é para ser usada na cláusula WHERE.
Com uma bela (nível médio de complexidade) query você consegue fazer todo esse trabalho de pegar as que completam 90 dias e dias menores também, agrupando e selecionando conforme o grupo de dias corridos.
Procure conhecer as cláusulas GROUP BY e HAVING.
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#9
Posted 24/02/2006, 10:50
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)
Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti
#10
Posted 24/02/2006, 11:11
www.aprendendoaamar.com
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)