Saber como tratar data e hora é fundamental para quem quer oferecer serviços ao usuário. Não somente com o propósito de exibir um relógio no site, mas para saber o tempo em que determinado usuário executou uma operação, a hora em que efetuou uma transação e armazenagem de dados.
A ActionScript armazena datas e horas internamente como epoch milliseconds, o tempo de milisegundos que passaram desde meia noite, 1 de Janeiro de 1970 no Tempo de Coordenada Universal (UTC – Coordinated Universal Time), e para nossos propósitos é equivalente ao GMT (Tempo do Meridiano de Greenwich).
Para exibir a data e a hora, utilizamos o objeto Date. Ele nada mais faz que retornar a data e hora do usuário.
var data:Date = new Date();
trace(data);
Retornando dados do objeto Date separadamente
Hora
A propriedade hours retorna um valor entre 0 e 23.
Minuto
A propriedade minutes retorna um valor entre 0 e 59.
Segundo
A propriedade seconds retorna um valor entre 0 e 59.
Dia
A propriedade date retorna um valor entre 0 e 23.
Mês
A propriedade month retorna um valor entre 0 e 11.
Ano
A propriedade fullYear retorna um valor de quatro dígitos como 2008.
Dia da semana
A propriedade day retorna um valor entre 0 6.
var tempo:Date = new Date();
var horas:uint = tempo.hours;
var minutos:uint = tempo.minutes;
var segundos:uint = tempo.seconds;
var dia:uint = tempo.date;
var mes:uint = tempo.month;
var ano:uint = tempo.fullYear;
var diaSemana:uint = tempo.day;
trace(horas + ":" + minutos + ":" + segundos);
trace(dia + "/" + mes + "/" + ano);
trace(diaSemana);
Recebendo o nome do mês e do dia da semana
Para associar valores numéricos a valores textuais como segunda-feira, criamos um array e trocamos o chamado do índice fixo pelo chamado do valor da data atual:
var tempo:Date = new Date();
var horas:uint = tempo.hours;
var minutos:uint = tempo.minutes;
var segundos:uint = tempo.seconds;
var dia:uint = tempo.date;
var mes:uint = tempo.month;
var ano:uint = tempo.fullYear;
var diaSemana:uint = tempo.day;
var arrDiasSemana:Array = ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"];
var arrMeses:Array = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
trace(arrDiasSemana[diaSemana] + ", " + dia + " de " + arrMeses[mes] + " de " + ano + ".");
//Quarta, 6 de Fevereiro de 2008.
Um exemplo completo com atualização constante na tela pode ser observado abaixo:
package {
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Sprite;
public class DataHora extends Sprite{
private var contador:Timer;
private var tempo:Date;
private var data:TextField;
private var hora:TextField;
private var meses:Array;
public function DataHora() {
meses = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
data = getChildByName("data_txt") as TextField;
hora = getChildByName("hora_txt") as TextField;
data.autoSize = TextFieldAutoSize.LEFT;
hora.autoSize = TextFieldAutoSize.LEFT;
contador = new Timer(1000);
contador.addEventListener(TimerEvent.TIMER, onTimer);
contador.start();
onTimer();
}
private function onTimer(e:TimerEvent = null):void {
tempo = new Date();
hora.text = zeroFill(tempo.hours) + ":" + zeroFill(tempo.minutes) + ":" + zeroFill(tempo.seconds);
data.text = tempo.date + " de " + meses[tempo.month] + " de " + tempo.fullYear + ".";
}
private function zeroFill(valor:Number):String {
if(valor > 9){
return valor.toString();
} else {
return "0" + valor.toString();
}
}
}
}
Convertendo entre DMYHMSM e Epoch Milliseconds
É importante saber converter o formato date em diferentes formatos de apresentação, pois nem sempre o sistema nos traz de forma aprazível estes valores. No exemplo abaixo, a propriedade time nos retorna a data em formato DMYHMSM (dia, mês, ano, hora, minuto, segundo, milisegundo). E na linha abaixo passamos no construtor um valor de tempo ao invés do ano, pedindo em seguida seu valor, o qual retornará a data como formato usual (epoch milliseconds).
var data:Date = new Date(2008, 0, 6);
//1199588400000 (timeValue)
trace(data.time);
var data2:Date = new Date(1199588400000);
//Sun Jan 6 00:00:00 GMT-0300 2008
trace(data2);