Danv 0 Denunciar post Postado Janeiro 8, 2004 Olá pessoal,Estou tentando fazer uma comparação entre duas datas.... mas não estou conseguindo....Uma das datas esta cadastrado no DB, a outra é a data atual.Uma das tentativas foi o seguinte....apos o rs, setei as variaveis:$data_atual = date('d/m/Y');$data_reg = $row_rsRespE['data2'];a comparação:if($data_reg >= $data_atual)não dá certo.... ehehe, eu quase consigo imaginar porque.... se não fosse o quase...Será que alguem saberia como posso fazer isso?Desde já, valeu pessoal. Compartilhar este post Link para o post Compartilhar em outros sites
Keitaro 0 Denunciar post Postado Janeiro 9, 2004 primeiro, 08/01/2004 é numero? Isso nao tem valor numero embora tenha numeros. Comparacoes de <> sao feitos para variaveis de valor numerico.outro detalhe, a sua comparacao é inutil, uma vez que a data de um registro ou sera menor ou igual a data atual, nunca sera maior. ;P a nao ser que o servidor volte no tempo. Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Janeiro 9, 2004 posé Keitaro...eu tenho uma data registrada.... exemplo12/01/2005preciso saber se a data atual é igual ou maior que esta... se a data atual for anterior a esta tera um comando.... se não tera outro....valeu pela dica.... mas alguem saberia como fazer esta comparação? Compartilhar este post Link para o post Compartilhar em outros sites
grldesign 0 Denunciar post Postado Janeiro 9, 2004 Teste da maneira abaixo... <?//PREPARANDO DATA ATUAL$data = date("d/m/Y");$data_atual = explode("/", $data);$dia_atual = $data_atual[0];$mes_atual = $data_atual[2];$ano_atual = $data_atual[4];//PREPARANDO DATA ANTIGA$data_antiga = explode("/", $row_rsRespE['data2']);$dia_antigo = $data_antiga[0];$mes_antigo = $data_antiga[2];$ano_antigo = $data_antiga[4];//COMPARANDOif (($dia_atual > $dia_antigo) || ($mes_atual >= $mes_antigo) || ($ano_atual >= $ano_antigo)) { echo "Data atual </b>$dia_atual/$mes_atual/$ano_atual</b> é maior que a data antiga <b>$dia_antigo/$mes_antigo/$ano_antigo</b>";}if....?>As condiçoes sao poucas e fáceis de fazer... Compartilhar este post Link para o post Compartilhar em outros sites
wxkj 0 Denunciar post Postado Janeiro 9, 2004 grldesign, desse modo que você mostrou não é seguro o correto é usar funções próprias do PHP. Um exemplo usando strtotime: <? function diferenca_dias($inicial,$final){ $inicial = strtotime($inicial); // 07/04/2003 (mm/dd/aaaa) data menor $final = strtotime($final); // 07/10/2003 (mm/dd/aaaa) data maior return ($final-$inicial)/86400; //transformação do timestamp em dias }$inicial = "07/04/2003";$final = "07/10/2003";echo diferenca_dias($inicial,$final);?>valor positivo: $final > $inicialvalor negativo: $final < $inicialvalor igual a zero: $final == $inicialobs: para calcular o strtotime é preciso informar a data no seguinte formato:mm/dd/aaaa, caso contrário ocorrerá erro. Compartilhar este post Link para o post Compartilhar em outros sites
grldesign 0 Denunciar post Postado Janeiro 10, 2004 Não é que não seja seguro, o porém é que existem condições, e se o programador esquecer um ai da problema.Precisa de perícia ali pra elaborar tudo...Mas seu codigo com certeza é mais facil... Compartilhar este post Link para o post Compartilhar em outros sites
Alisson Rodrigues 3 Denunciar post Postado Janeiro 10, 2004 Pode ser por comando mysql (com a data no banco assim: dd/mm/YYYY: SELECT * FROM tabela where TO_DAYS(CONCAT(SUBSTRING(data,7,4),"-",SUBSTRING(data,4,2),"-",SUBSTRING(data,0,2)) >= TO_DAYS(timestamp())Acho que assim dá certo, tenta aí. ;) Compartilhar este post Link para o post Compartilhar em outros sites
Eduardo Sucena 0 Denunciar post Postado Janeiro 10, 2004 O WXKJ esta certo.tem uma função que retorna um numero inteiro de segundos de uma determinada data a´te um certo dia de 1970 ( esse dia é padrão). Se eu nao me engano é a Função mktime. Dai para comparar as datas era só ver qual data tem o maio mktime ( maior numero de segundos desde 1970). A que tiver mais é mais recente.Dá uma pesquisada nesse sentido . Até mais =]. Compartilhar este post Link para o post Compartilhar em outros sites
Danv 0 Denunciar post Postado Janeiro 10, 2004 vixi.... fiquei quebrando a cabeça e a partir do que o grldesign me passou cheguei aqui.... <?phpif($_GET['i'] == "ok"){ //PREPARANDO DATA ATUAL $data = date("Ymd"); $ano_atual = substr($data, 0, 4); $mes_atual = substr($data, 5, 2); $dia_atual = substr($data, 7, 2); //PREPARANDO DATA ANTIGA $datac = $row_rsRespE['data2']; $ano_c = substr($datac, 0, 4); $mes_c = substr($datac, 5, 2); $dia_c = substr($datac, 8, 2); //COMPARANDO if($ano_c == $ano_atual){ if($mes_c == $mes_atual){ if($dia_c >= $dia_atual){ header ("Location: inicio.php"); }else{ header ("Location: clientes_v.php"); } }elseif($mes_c > $mes_atual){ header ("Location: inicio.php"); }else{ header ("Location: clientes_v.php"); } }elseif($ano_c > $ano_atual){ header ("Location: clientes_v.php"); }elseif($ano_c < $ano_atual){ header ("Location: inicio.php"); } }?> :blink: é que ocorre a seguinte situação, tem uma pagina [clientes.php] que mostras uma listagem de clientes, mas para acessar um cliente é necessário setar a data de inicio do serviço (gestão anual) então em [clientes.php] o link para visualizar os dados do cliente (que seria em clientes_v.php) o link é para [inicio.php], mas na pagina da listagem de clientes [cliente.php] já é feita a consulta de cada cliente se já foi iniciado o serviço ou não , se já foi iniciado é colocado um parametro no link [inicio.php?i=ok], o link de visualização cai na verificação acima para saber se a data não venceu.... se já venceu, é necessário cadastrar uma nova data para inicio dos serviços. deu para entender? o script acima esta funcionando perfeitamente, mas vou tentar utilizar como foi indicado abaixo. Valeu pessoal, qualquer coisa tamo ae. grldesign, desse modo que você mostrou não é seguro o correto é usar funções próprias do PHP. Um exemplo usando strtotime: <? function diferenca_dias($inicial,$final){ $inicial = strtotime($inicial); // 07/04/2003 (mm/dd/aaaa) data menor $final = strtotime($final); // 07/10/2003 (mm/dd/aaaa) data maior return ($final-$inicial)/86400; //transformação do timestamp em dias } $inicial = "07/04/2003"; $final = "07/10/2003"; echo diferenca_dias($inicial,$final); ?> valor positivo: $final > $inicial valor negativo: $final < $inicial valor igual a zero: $final == $inicial obs: para calcular o strtotime é preciso informar a data no seguinte formato: mm/dd/aaaa, caso contrário ocorrerá erro. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 23, 2012 Use a classe DateTime <?php $date_time = new DateTime( '2012-06-22' ); // data cadastrada no banco de dados $diff = $date_time->diff( new DateTime( ) ); // data atual if( $diff->d > 0 ) { echo 'Data atual é maior que a data cadastrada!'; } elseif( $diff->d == 0 and $diff->invert == 0 ) { echo 'Data atual é igual a de hoje!'; } else { printf( 'Falta(m) %u dia(s)', $diff->invert ); } Compartilhar este post Link para o post Compartilhar em outros sites
Progjunior Daniel 34 Denunciar post Postado Junho 25, 2012 tem função já pronta. <?php function dataDif($data1, $data2, $intervalo) { switch ($intervalo) { case 'y': $Q = 86400*365; break; //ano case 'm': $Q = 2592000; break; //mes case 'd': $Q = 86400; break; //dia case 'h': $Q = 3600; break; //hora case 'n': $Q = 60; break; //minuto default: $Q = 1; break; //segundo } return round((strtotime($data2) - strtotime($data1)) / $Q); } depois voce chama a funcao assim: $intervalo_mes = dataDif($data1, $data2, 'm') as opções existente na funcao voce escolhe, atraves das letras. Compartilhar este post Link para o post Compartilhar em outros sites