LSParseDateTime() é sua amiga!

Suponha que você receba uma data preenchida por um formulário no padrão que usamos em nosso país (“dd/mm/aaaa”) e você precisa adicionar dois dias a esta data. Qual seria a solução a se adotar? Simples, você pensa, basta adicionar dois dias à data certo?

<cfset data_inicial="03/04/2004">
<cfset data_final=data_inicial+2>
<cfoutput>#DateFormat(data_final, "dd/mm/yyyy")#</cfoutput>

Mas aí você roda o código e vê que a data (“data_final”) retornada será igual a 06/03/2004… Ué? A data indicada (“data_inicial”) era 03/04/2004, somando-se dois dias a esta data teríamos então como resultado 05/04/2004 né?… Errado (faça o teste você mesmo). Ok, você pensa, “vou usar uma função específica do CF para isso. Ficar fazendo essas gambetas com somas puras sempre dá problema…” e eis que surge sua salvadora: DateAdd():

<cfset data_inicial="03/04/2004">
<cfset data_final=DateAdd("d",2,data_inicial)>
<cfoutput>#DateFormat(data_final, "dd/mm/yyyy")#</cfoutput>

E você roda o código e percebe, frustado, que a data mostrada continua sendo 06/03/2004. Você fala: “esses ingleses (e os americanos por tabela) são uns cretinos mesmo… por que foram inventar essa de querer ser diferente do resto do mundo no formato das datas??…… Hei… espere… Mas como eu sou burro!! O resultado deu os mesmos “06/03/2004” porque eu esqueci de setar o locale para “Portuguese(Brazilian)” e usar a função LSDateFormat() para mostrar a dita cuja… Agora vai!

<cfset setlocale("Portuguese (Brazilian)")>
<cfset data_inicial="03/04/2004">
<cfset data_final=DateAdd("d",2,data_inicial)>
<cfoutput>#LSDateFormat(data_final, "dd/mm/yyyy")#</cfoutput>

E tchan-tchan-tchan!… o resultado é: 06/03/2004… (gulp!)

É justamente aí que entra em cena uma função pouco usada e conhecida mas que é de suma importância para nós que usamos um padrão de datas diferente do dos donos do mundo:

<cfset setlocale("Portuguese (Brazilian)")>
<cfset data="03/04/2004">
<cfset data1=DateAdd("d",2,LSParseDateTime(data))>
<cfoutput>#LSDateFormat(data1, "dd/mm/yyyy")#</cfoutput>

Agora sim, teremos como resultado 05/04/2004. Use-a sempre que estiver fazendo operações com datas no nosso formato.


2 Comments on “LSParseDateTime() é sua amiga!”

  1. Vicente Marçal disse:

    Salve Alex,

    Puxa muito interessante esse teu post, estou sentindo falta, nos blogs técnicos, de informações e dicas assim “Técnicas”. heheheh sempre vemos o de sempre, ou seja, fala-se muito sobre as fofocas do mundo IT mas falta esse tipo de informação para que haja crescimento no desenvolvimento de aplicações! Abraços

  2. Drausio disse:

    Esse post me ajudou de maneira incrivel!
    Obrigado.