Trabalhando com Datas. Um problema que me persegue…
Bha, datas… Este é conserteza o item mais gera problema para a vida de todos… A gente nasce em uma data e conforme passam-se as datas dos aniversários, mais velho ficamos, até que uma certa data tudo se acaba. Tente conseguir a data de nascimento de uma mulher, esqueca da data do aniversário de casamento…
Lembro de quando precisei somar datas no PHP, pela primeira vês, e quando precisei fazer aritmética com datas no MySQL, e sem esquecer das datas no Flex.
Mais alguns dos problemas de datas no Flex eu vou exemplificar um pouco agora . . .
O Flex trabalha com datas no formato UTC. Mais o que é UTC?
Horário UTC é Horário universal coordenado (em inglês Coordinated Universal Time). É o fuso horário de referência a partir do qual se calculam todas as outras zonas horárias do mundo ou fuso horário de referência de “zero hora”.
A nova denominação foi cunhada para eliminar a inclusão de uma localização específica num padrão internacional, assim como para basear a medida do tempo nos padrões atômicos, mais do que nos celestes. A vantagem da utilização do UTC é que não depende das políticas dos diversos países ou comunidades, e não necessita de regulação relativa a horas de inverno ou verão. (Fonte pt.wikipedia).
Abaixo estão os principais problemas no trabalho com datas:
- Data Atual (Esta data depende da data configurado no computador do usuário);
- Somar dias;
- Somar Meses;
- Somar anos;
- Somar datas;
- Fuso Horário.
Criando Datas
Você poderá chamar a classe data de várias formas, para, dependendo da necessidade. A primeira é apenas instanciando a classe Date() para obter a data atual.
Arquivo main01.mxmlvar DataAtual:Date = new Date();
Se você passar apenas elemento numérico, ele retorna uma data e contando da data de 1º de Janeiro de 1970. Eu chamei a Date(0), e recebi a seguinte data: “31/12/1969 21:00:00″.
Mais não seria Janeiro de 1970?
Para aqueles que, como eu, o Fuso Horário esta definido como -03:00, esta sendo descontado este tempo da data de 1º de Janeiro de 1970. Então 21H somando mais 03H chegamos há 24H.
Arquivo main01.mxmlvar DataJaneiro1970:Date = new Date(0);
Também é possível passar uma sequência de valores numéricos para a classe. Esses parâmetros são respectivamente ano, mês, dia, hora, minuto, segundo e milissegundo. O unico detalhe a lembrar é que os meses iniciam em 0 (zero), sendo Janeiro=0, Fevereiro=1, etc.
Arquivo main01.mxmlvar DataEscritaPost:Date = new Date(2008, 10, 12, 14, 33, 21, 967);
Abaixo segue um exemplo onde há criação de datas.
Aritmética com datas
Esta com certeza é a pior tarefa que envolve datas, já vi exemplos como este abaixo para somar um mês da data atual:
var DataAtual:Date = new Date();
var DataEscritaPost:Date = new Date(DataAtual.getFullYear(),
DataAtual.getMonth() + 1,
DataAtual.getDate());
Funciona, mais há processos mais fáceis. Não há um método pronto que faça isso, mais abaixo mostro com detalhes estas somas.
Arquivo main02.mxmlprivate static const DataAtual:Date = new Date();
private function somarDias(data:Date, dias:int):Date
{
var dataTMP:Date = new Date(data);
dataTMP.setDate(dataTMP.getDate() + dias);
return dataTMP;
}
private function somarMeses(data:Date, Meses:int):Date
{
var dataTMP:Date = new Date(data);
dataTMP.setMonth(dataTMP.getMonth() + Meses);
return dataTMP;
}
private function somarAnos(data:Date, Anos:Number):Date
{
var dataTMP:Date = new Date(data);
dataTMP.setFullYear(dataTMP.getFullYear() + Anos);
return dataTMP;
}
private function init():void
{
amanha.text = "Amanhã é dia: " + DateFormatter.format(somarDias(DataAtual, 1));
mesQueVem.text = "Daqui a um Mês é dia: " + DateFormatter.format(somarMeses(DataAtual, 1));
anoQueVem.text = "Daqui a um Ano é dia: " + DateFormatter.format(somarAnos(DataAtual, 1));
}
Fuso Horário
Se você pegar um sistema de uma empresa multi-nacional, encontrará um problema com relação ao Fuso-Horário.
O método getTimezoneOffset() é úteis quando você deseja converter datas de um fuso horário para outro. Ele retorna o valor como a diferença de minutos entre o fuso horário do objeto Date e o UTC.
Arquivo main03.mxmlprivate static const DataAtual:Date = new Date(); Atual.text = "Data Atual: " + DateFormatter.format(DataAtual); private var offsetMilliseconds:Number = DataAtual.getTimezoneOffset() * 60 * 1000; DataAtual.setTime(DataAtual.getTime() + offsetMilliseconds); UTC.text = "Data UTC: " + DateFormatter.format(DataAtual);
Abaixo segue um exemplo, onde é apresentado a data atual e a data no UTC.
PS: Sempre utilize “data atual” vinda do servidor, nunca confie na data que o usuário possui na maquina local.
O código fonte deste Post esta disponível aqui.
Você pode seguir todas as respostas a esta entrada através do RSS 2.0 feed. Você pode deixar um comentário, ou colocar um link em seu site.


Boa noite!
Caro Eduardo,
Preciso de uma ajuda para desenvolver um simples sistema de busca em BD MYsql numa escola publica onde falo estagio para a secretaria escolar na pesquisa de localização de documentos, apenas existe um via documentação em livros de registros, a qual dispende muito tempo porocurando quando da solicitação de um documento por pais e alunos já formados ou situações irregualres…
agradeço a oportunidade,
Claudio Batista
Guarapari – ES.
Observação: pode ser em php…