Jump to content


Photo

Comparação De Datas


  • Faça o login para participar
6 replies to this topic

#1 _SherlocK_

_SherlocK_

    12 Horas

  • Usuários
  • 120 posts
  • Sexo:Não informado
  • Localidade:Londrina/PR
  • Interesses:Meu fórum www.webdmais.com.br/forum<br>Meu site www.webdmais.com.br

Posted 28/03/2006, 09:07

Gente estou com um problema, não estou conseguindo comparar a data corretamente.

segue abaixo uma explicação passo a passo de como está feito

Está dando erro quando faço a verificação, ele não está verificando o mês, somente o dia, e no banco ele salva normal yyyy-mm-dd.
Eu uso um Script que peguei Pronto Para Formatação De Campos Diversos, Utilizo Para Formatar A Data (página – cronocadsubevento.php){


<script language="JavaScript1.2">

function dataFormat(){
if(document.getElementById("021").value.length == 2)
document.getElementById("021").value += "/";
if(document.getElementById("021").value.length == 5)
document.getElementById("021").value += "/";
}
/* Formatação para qualquer mascara */

function formatar(src, mask) {
var i = src.value.length;
var saida = mask.substring(0,1);
var texto = mask.substring(i)
if(texto.substring(0,1) != saida) {
src.value += texto.substring(0,1);
}
}

/*
Exemplos:
CEP
OnKeyPress="formatar(this, '#####-###')"
CPF
OnKeyPress="formatar(this, '###.###.###-##')"
DATA
OnKeyPress="formatar(this, '##/##/####')"
*/
</script>

}
No Formulário (página – cronocadsubevento.php){


<form action="cronogravasubevento.php" method="post" name="links" id="links">
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="122" class="textos"><div align="center" class="textos">
<div align="left">Atividade</div>
</div></td>
<td colspan="3"><select name="codatividade" id="codatividade">
<? $pessoa=$_SESSION['id'];
$query = "SELECT *
FROM cronograma
WHERE situacao='NOR' and sub='1' and concluido='NAO' and responsavel='$pessoa'
ORDER BY atividade ASC";
$busca = mysql_query($query, $link);

while($lista=mysql_fetch_array($busca)){ ?>
<option value="<?=$lista['cronograma_id']; ?>"><?=$lista['atividade']; ?></option>
<? } ?></select></td>
</tr>
<tr>
<td class="textos">&nbsp;</td>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td class="textos">Sub-Respons&aacute;vel:</td>
<td colspan="3"><select name="subresponsavel" id="subresponsavel">
<? $pesqempresa=$_SESSION['empresa'];
$query = "SELECT *
FROM usuario
WHERE situacao='NOR' and empresa='$pesqempresa' and usuario_id > 1
ORDER BY usuario_id ASC";
$busca = mysql_query($query, $link);

while($lista=mysql_fetch_array($busca)){ ?>
<option value="<?=$lista['usuario_id']; ?>"><?=strtoupper($lista['exibicao']); ?></option>
<? } ?></select></td>
</tr>
<tr>
<td class="textos">Sub-Atividade:</td>
<td colspan="3"><input name="subatividade" type="text" id="subatividade" size="60" maxlength="60" onChange="java script:this.value=this.value.toUpperCase();"></td>
</tr>
<tr>
<td class="textos">&nbsp;</td>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="4" class="textos"><strong>Sub-Previs&atilde;o</strong></td>
</tr>
<tr>
<td class="textos"><div align="left">Data Inicio:</div></td>
<td width="325"><input name="subdatainicio" type="text" id="telefone4" value="<?=date("d/m/Y", $data_nova = strtotime($dataagora));?>" size="20" maxlength="10" OnKeyPress="formatar(this, '##/##/####')"> </td>
<td width="233" class="textos"><div align="left"></div></td>
</tr>
<tr>
<td class="textos"><div align="left">Data Fim:</div></td>
<td><input name="subdatafim" type="text" id="data" value="<?=date("d/m/Y", $data_nova = strtotime($dataagora));?>" size="20" maxlength="10" OnKeyPress="formatar(this, '##/##/####')"> </td>
<td class="textos">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="4"><div align="center">
<input type="submit" name="Submit" value=" Cadastrar ">
</div></td>
</tr>
</table>
</form>

}
Recebo o formulário na pagina ( cronogravasubevento.php ){


<?

$codatividade=$HTTP_POST_VARS['codatividade'];
$subresponsavel=$HTTP_POST_VARS['subresponsavel'];
$subatividade=$HTTP_POST_VARS['subatividade'];
$subdatainicio = explode("/",$HTTP_POST_VARS['subdatainicio']);
$subdatainicio = $subdatainicio{2}."-".$subdatainicio{1}."-".$subdatainicio{0};
$subdatafim = explode("/",$HTTP_POST_VARS['subdatafim']);
$subdatafim = $subdatafim{2}."-".$subdatafim{1}."-".$subdatafim{0};

$query = "SELECT *
FROM cronograma
WHERE situacao='NOR' and cronograma_id='$codatividade'
ORDER BY datainicio ASC";
$busca = mysql_query($query, $link);
$listas=mysql_fetch_array($busca);

$sqlvarre = "SELECT *
FROM usuario
WHERE usuario_id='$subresponsavel'";
$buscando = mysql_query($sqlvarre);
$varre = mysql_num_rows($buscando);
$rs = mysql_fetch_array($buscando);
$responsavel=$rs["exibicao"];


$SQL="INSERT INTO cronogramasub (codatividade, subresponsavel, subatividade)
values ('$codatividade', '$subresponsavel', '$subatividade')";
$result=mysql_query($SQL);

$SQL2="INSERT INTO cronodata (subatividade_id, datainicio, datafim, usuario)
values (LAST_INSERT_ID(), '$subdatainicio', '$subdatafim', '$subresponsavel')";
$result2=mysql_query($SQL2);


if (($result)and($result2)) {
print "<strong><font face='Verdana, Arial, Helvetica, sans-serif' color='#336699' size='2'>Sub-Atividade Cadastrada</font></strong><br><p><a href='./cronoveevento.php'>Voltar</a><p>";

// INICIO - ENVIAR E-MAIL DE AVISO PARA AS PESSOAS
RETIRADO O CODIGO DE ENVIO DE EMAIL
// FIM - ENVIAR E-MAIL DE AVISO PARA AS PESSOAS

}
else {
print "<strong><font face='Verdana, Arial, Helvetica, sans-serif' color='#336699' size='2'>Deu Erro</font></strong><br>".mysql_error()."<p><a href='./cronograma.php'>Voltar</a><p>";
}
?>

}
Com isso está gravado no banco de dados a data, agora na parte de baixo é na pagina (cronoveevento.php), nesta eu faço a comparação de datas{


<? $codatividade=$lista["cronograma_id"];
$datahoje=date("d/m/Y", $data_nova = strtotime(date("Y-m-d")));
$query1 = "SELECT *
FROM cronogramasub
WHERE situacao='NOR' and codatividade='$codatividade'";
$busca1 = mysql_query($query1);

while($lista1=mysql_fetch_array($busca1)){
$subativi_id=$lista1["subatividade_id"];
$codigando = "SELECT *
FROM cronodata
WHERE usuario='$exibeidnome' and subatividade_id='$subativi_id' and situacao='NOR'";
$pegandos = mysql_query($codigando);
$varrando = mysql_num_rows($pegandos);
$rsando = mysql_fetch_array($pegandos);

// Inicio - Mostrar cores dependendo do status da subatividade
$subconcluido=$lista1["concluido"];
$subdataconcluido_=date("d/m/Y", $data_nova = strtotime($rsando["dataconcluido"]));
$subdatainicio_=date("d/m/Y", $data_nova = strtotime($rsando["datainicio"]));
$subdatafim_=date("d/m/Y", $data_nova = strtotime($rsando["datafim"]));
$novadatafim=$rsando["novadatafim"];

if ($novadatafim == "0000-00-00"){
$datafinal=$subdatafim_;
}else{
$datafinal=date("d/m/Y", $data_nova = strtotime($novadatafim));
}

if ($subconcluido=="SIM"){
$conclued="SIM";
if ($subdataconcluido_ > $subdatafim_){
$cor="#FFD8BC"; // concluido em atraso
}else{
$cor="#B6FFED"; // concluido no tempo certo
}
}else{
$conclued="NAO";
if ($datahoje <= $datafinal){
$cor="#FFFFFF"; // está em dia
$liberadata="CERTO";
}else{
$cor="#FAAFAF"; // está atrasado
$liberadata="ATRASO"; // se estiver entraso coloca a mensagem para abrir uma caixa de cadastro de datas
}
}
// Fim - Mostrar cores dependendo do status da subatividade
?>


MAIS ABAIXO DA PAGINA ELE MANDA IMPRIMIR, SEGUE O CODIGO:


<table border="0" align="right">
<tr>
<td width="66"><span class="noticia">Data Inicio </span></td>
<td width="100"><div align="center"><span class="noticia"><?=$subdatainicio_; ?></span></div> </td>
<td width="11">&nbsp;</td>
<td width="58"><span class="noticia">Data Fim</span></td>
<td width="100"><div align="center"><span class="noticia"><?=$datafinal; ?></span></div>
</td>
<?
$nomemaiuscula=strtoupper($_SESSION['login']);

if ($nomemaiuscula != $subresponsavel){ // Se entrar eu verifico o cronograma de uma outra pessoa
if ($lista1["concluido"]=="NAO"){
?>
<td width="110"><div align="right"><font size="1"><span class="noticia">&nbsp; </span></font></div></td>
<?
}else{
?>
<td width="110"><div align="right" class="noticia"><font size="1" color="#009933">CONCLUIDO<br>Dia: <?=$subdataconcluido_; ?></font></div></td>
<?
}
}else{ // Se entrar eu verifico o meu cronograma
if ($lista1["concluido"]=="NAO"){
if ($liberadata=="ATRASO"){ ?>
<td width="110"><div align="right"><font size="1"><a href="java script:Start('cronocadnovadata.php?caddata=<?=$lista1['subatividade_id']?>')">Cadastrar nova Data</a></font></div></td>
<? }else{
?>
<td width="110"><div align="right"><font size="1"><a href="java script:concluir('<?=$lista1['subatividade_id']?>')">Concluir</a> | <span class="noticia">Excluir</span></font></div></td>
<?
}
}else{
?>
<td width="110"><div align="right" class="noticia"><font size="1" color="#009933">CONCLUIDO<br>Dia: <?=$subdataconcluido_; ?></font></div></td>
<?
}
}
?>
</tr>
</table>

}Ele não está comparando corretamente as datas. VALEU A AJUDA =)

Edição feita por: _SherlocK_, 28/03/2006, 09:08.

WebDmais Informática => Clique Aqui
WebDmais Fórum => Clique Aqui * Aberto para Parcerias *

#2 .camila

.camila

    Turista

  • Usuários
  • 51 posts
  • Sexo:Não informado

Posted 28/03/2006, 10:31

Olá _SherlocK_,

Bom, até onde eu sei a comparação de datas "só" é possível quando você as converte em segundos, através da seguinte função:


int mktime ( [int hora [, int minuto [, int second [, int mes [, int dia [, int ano [, int is_dst]]]]]]] )


Exemplo de uso:


$data_seg = mktime(0,0,0,$mes,$dia,$ano);


Até o momento só utilizei dessa forma, mas caso alguém saiba de outra, seria bacana que postassem aqui.


Mais informações: http://www.php.net/m...tion.mktime.php

[]'s

#3 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 28/03/2006, 10:57

Dependendo da versão do MySQL:

DATEDIFF(expr,expr2)

DATEDIFF() returns the number of days between the start date expr and the end date expr2. expr and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31


Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#4 _SherlocK_

_SherlocK_

    12 Horas

  • Usuários
  • 120 posts
  • Sexo:Não informado
  • Localidade:Londrina/PR
  • Interesses:Meu fórum www.webdmais.com.br/forum&lt;br&gt;Meu site www.webdmais.com.br

Posted 31/03/2006, 14:35

Eclesiastes ou camila, onde eu terei que converter, em que parte do site?

Edição feita por: _SherlocK_, 31/03/2006, 14:35.

WebDmais Informática => Clique Aqui
WebDmais Fórum => Clique Aqui * Aberto para Parcerias *

#5 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 31/03/2006, 14:41

- Você quer comparar o mês com o mês atual?
- A informação está no banco de dados no formato YYYY-MM-DD num campo do tipo DATE?
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#6 _SherlocK_

_SherlocK_

    12 Horas

  • Usuários
  • 120 posts
  • Sexo:Não informado
  • Localidade:Londrina/PR
  • Interesses:Meu fórum www.webdmais.com.br/forum&lt;br&gt;Meu site www.webdmais.com.br

Posted 31/03/2006, 17:07

exato

eu quero comparar se o YYYY-MM-DD que está no banco com a data atual para ver se é maior ou menos para funcionar conforme o planejado no cronograma
WebDmais Informática => Clique Aqui
WebDmais Fórum => Clique Aqui * Aberto para Parcerias *

#7 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 31/03/2006, 18:47

Exemplos:

WHERE campo_data > CURDATE()
WHERE campo_data < CURDATE()

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




2 user(s) are reading this topic

0 membro(s), 2 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq