Ir para conteúdo

POWERED BY:

Arquivado

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

danielnh

[Resolvido] Problema com a classe Date

Recommended Posts

Olá pessoal!

Estava tentando fazer uma coisa simples: a partir de alguns parâmetros, calcular uma data futura usando a classe Date. Entretanto, percebi que, se a final for maior ou igual a 26/02 (e a inicial for menor), o cálculo não funciona.

 

Testem o código abaixo substituindo o valor inicial de "limite" para 27. Pra mim, tanto com 26 quanto com 27, o resultado é o mesmo ("25/02/2012"). Adicionalmente, valores maiores de que 27 também continuam errados (enquanto valores menores funcionam perfeitamente).

 

Alguém sabe explicar esse comportamento?

 

 

<html>
<title></title>

<script type="text/javascript" charset="iso-8859-1" >
  var limite = 26;
  var strDataIni = '30/01/2012';

  var date1 = strDataIni.split('/');
  var iniDate = new Date(date1[1]+'/'+date1[0]+'/'+date1[2]);

  var d = new Date();
  d.setTime(iniDate.getTime() + limite*24*60*60*1000);

  var dia = (d.getDate()<10)?'0'+d.getDate():D.getDate();
  var mes = ((d.getMonth()+1)<10)?'0'+(d.getMonth()+1):(d.getMonth()+1);

  dtaFinal = dia+'/'+mes+'/'+d.getFullYear();

alert(dtaFinal);
</script>

<body>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Analisando com mais atenção, consegui descobrir o problema, mas ainda não descobri a solução.

 

O cálculo da data futura se deu por meio da soma dos milissegundos necessários para fechar a quantidade de dias selecionados na variável "limite". Entretanto, a classe Date detectou que 25/02/2012 é final de horário de verão. Dessa forma, o resultado, em vez de "26/02/2012 00:00:00", foi "25/02/2012 23:00:00". Como eu estava analisando apenas a data, não tinha percebido isso, e via apenas o dia 25 que teimava em não mudar.

 

Agora fica a pergunta: como posso fazer pra calcular uma data alguns dias no futuro, ignorando essa conversão do horário de verão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Sera que isso ajuda?

 

A solução para o problema é informar no construtor do objeto Date() ano, mês, dia, hora, minuto e segundo, ainda que hora, minuto e segundo sejam configurados para 1. Como em:

 

JavaScript

var date = new Date(1973, 10, 4, 1, 1, 1

 

Fonte: Clique aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei a resposta:

 

   <html>
   <script type="text/javascript" charset="iso-8859-1" >
       var days = 26;
       var strIniDate = '01/30/2012';
       var iniDate = new Date(strIniDate);
iniDate.setDate(iniDate.getDate()+days);
       alert('Initial date: '+iniDate);
   </script>

   <body>
   </body>
   </html>

 

--

 

Oi Angelo!

Agradeço a dica, mas não acho que isso fosse impedir a alteração por conta do horário de verão. De qualquer forma, usando o setDate funcionou...

 

Abraço,

Daniel

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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