DevSecOps

27 jun, 2008

Tratamento de data e hora via Actionscript

Publicidade

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);