Usabilidade na exibição de datas e horas
Recentemente venho tomando um cuidado maior na forma como apresento as informações de um sistema para o usuário.
Certos tipos de dados quando apresentados para o usuário não trazem consigo muita informação, um caso clássico são as datas e horas. Datas e Horas ganham muito mais significado quando comparadas a outras datas, por isso, seria muito mais interessante que nas consultas, relatórios e outros locais do sistema, aonde mantenham-se datas e horas, o sistema fizesse estas comparações para o usuário, pois se o sistema não o fizer, o usuário vai ter que fazer isto “de cabeça”.
Na prática o que quero demonstrar é que é muito mais fácil e natural, ler algo como “O boleto vence daqui 3 dias”, do que, “O boleto vence dia 10/02/2008”. Percebam como no primeiro exemplo houve uma comparação da data de vencimento do boleto com a data atual, o que significa que o vencimento é daqui 3 dias, enquanto no segundo exemplo apenas foi informado a data de vencimento, nua e crua.
…usabilidade normalmente se refere à simplicidade e facilidade com que uma interface, um programa de computador ou um website pode ser utilizado. Fonte: http://pt.wikipedia.org/wiki/Usabilidade
A informação de que o boleto vence no dia 10 é importante, mas ela seria muito mais informativa se viesse acompanha da dica de que esta data de vencimento acontece somente daqui 3 dias.
Percebam que sempre haverá a comparação com outra data, para poder fornecer este tipo de informação ao usuário, pode ser uma relação da data de nascimento com a data atual, da data de vencimento com a data de pagamento etc.
Sempre que houver uma interface, ou seja, um ponto de contato entre um ser humano e um objeto físico (ex: cafeteira) ou abstrato (ex: software), podemos observar a usabilidade que esse objeto oferece. Fonte: http://usabilidoido.com.br
O Gmail se utiliza desta técnica também, e é muito útil. Quando uma mensagem é aberta, é exibido no canto direito a quantos minutos, horas ou dias a mensagem foi enviada, ao lado da data ou hora de envio.
Usabilidade é sinônimo de facilidade de uso. Se um produto é fácil de usar, o usuário tem maior produtividade: aprende mais rápido a usar, memoriza as operações e comete menos erros. Fonte: http://usabilidoido.com.br
Desenvolvi uma função em Delphi que permite passar como parâmetro duas datas e retornar a diferença em anos, meses e dias das duas datas. A função tem ainda um terceiro parâmetro opcional que permite definir o nível de comparação, permitindo retornar assim somente os anos/mêses, mêses/dias ou os anos/mêses/dias entre as duas datas.
Adaptando o código, ela poderia ser facilmente convertida para o PHP. Se alguém o fizer, por favor responda, colocando o código-fonte junto.
Segue abaixo o código-fonte da função:
function FuzzyDateBetween(DateOf,DateThen: TDateTime; Nivel: Word=2): string; var anos, meses, dias, i: integer; str, junta: string; begin str := ''; junta := ''; EnsureRange(Nivel,1,3); for i := 1 to Nivel do begin anos := YearsBetween(DateOf,DateThen); if anos = 0 then begin meses := MonthsBetween(DateOf,DateThen); if meses = 0 then begin dias := DaysBetween(DateOf,DateThen); if dias = 1 then str := str + junta + IntToStr(dias) + ' dia' else str := str + junta + IntToStr(dias) + ' dias'; break; end else begin if meses = 1 then str := str + junta + IntToStr(meses) + ' mês' else str := str + junta + IntToStr(meses) + ' meses'; junta := ' e '; DateOf := incMonth(DateOf, meses); end; end else begin if anos = 1 then str := str + junta + IntToStr(anos) + ' ano' else str := str + junta + IntToStr(anos) + ' anos'; junta := ifThen(Nivel=3,', ',' e '); DateOf := IncYear(DateOf,anos); end; end; Result := Trim(str); end;
Alguns exemplos de chamadas a função:
FuzzyDateBetween(’11/09/2001′,’31/01/2008′,1) resulta em “6 anos”
FuzzyDateBetween(’11/09/2001′,’31/01/2008′,2) resulta em “6 anos e 4 meses”
FuzzyDateBetween(’11/09/2001′,’31/01/2008′,3) resulta em “6 anos, 4 meses e 20 dias”
FuzzyDateBetween(’11/09/2007′,’31/01/2008′,1) resulta em “4 meses”
FuzzyDateBetween(’11/09/2007′,’31/01/2008′,2) resulta em “4 meses e 20 dias”
FuzzyDateBetween(’11/09/2007′,’31/01/2008′,3) resulta em “4 meses e 20 dias”
P.S.: Ignorei a conversão da data para não ficar extenso demais, no Delphi o correto seria passar como parâmetro StrToDate(’11/09/2001′), etc.
Na próxima versão da função vou implementar o cálculo de diferença de horas, minutos e segundos.