FORMATANDO DATAS

USUARIO.EXCLUIDOS 27/05/2007 22:32:33
#218426
Estou com um problema é o seguinte na hora de formatar datas. Na base dados é gravado no formato mm/dd/yyyy. Montei uma função para colocar a data no formato brasileiro.

Function FormataData(Data)
If Data <> "" Then
FormataData = Right("0" & DatePart("d", Data),2) & "/" & Right("0" & DatePart("m", Data),2) & "/" & DatePart("yyyy", Data)
End If
End Function


Só que acontece o seguinte se eu cadastrar com uma data 06/05/2007 (dd/mm/yyyy), na base de dados vai ficar 5/6/2007. Até ai tudo bem, mas na hora de usar a função, qdo seria pra aparecer 6/5/2007, ele aparece como 5/6/2007.

A função neste caso não está reconhencoo o que é data e mês. Alguém saberia uma forma correta para fazer isso?

Obrigado pela atenção!
EMANUEL 28/05/2007 07:10:16
#218437
Amigo,

veja as configurações regionais do seu micro.

sds
Emanuel
USUARIO.EXCLUIDOS 28/05/2007 07:23:31
#218439
é so vc gravar no banco do jeito que vc quiser

rs!data=format(data,"mm/dd/yyyy")
USUARIO.EXCLUIDOS 28/05/2007 08:37:48
#218443
Deixa eu mostrar como eu fiz, acho que vai ficar mais fácil pra visualizar.

Primeiro meu mudei para utlizar a datas e moedas no padrão americado:
Session.LCID = 1033

E criei 2 funcções:

Para formatar as datas no padrão brasileiro (dd/mm/yyyy)
Function FormataData(Data)
If Data <> "" Then
FormataData = Right("0" & DatePart("d", Data),2) & "/" & Right("0" & DatePart("m", Data),2) & "/" & DatePart("yyyy", Data)
End If
End Function


Para formatar as datas no padrão americano (mm/dd/yyyy)
Function FormataDataAmericano(Data)
Dim v
v = Right("0" & Mid(Data,4, 2),2) & "/" & Right("0" & Left(Data, 2),2) & "/" & DatePart("yyyy", Data)
v = Cdate(v)
FormataDataAmericano = v
End Function


Sempre quando vou gravar na base de dados eu uso a função FormataDataAmericano e pra eu visualizar na página uso FormataData

Acontece q com certas datas não sei porque ele meio que se perde não trazendo corretamente. Geramente são datas tipo: 5/6/2007 ou 4/5/2007
MARCELOKROL 28/05/2007 10:44:48
#218470
Bom companheiro se foi isso que eu entendi por que vc nao utiliza o comando FORMAT exemplo:

'para formata para a data (padrão brasileiro)
dim Data
Data = format("6/5/2007","dd/mm/yyyy") ' resultado 06/05/2007

'para formata para a data padrão americano
data = format("6/5/2007","mm/dd/yyyy) ' resultado 05/06/2007

Consulte o help do vb para mais informações sobre o format.
USUARIO.EXCLUIDOS 28/05/2007 12:24:40
#218486
Cara na boa, para vc não ter problemas com datas (falo por experiencia propria), você tem que pensar no seguinte:
- Aonde vai rodar seu aplicativo? Pois na hora de desenvolver, geralmente é em um XP com as configurações regionais do Brasil, mas quando vc colocar para rodar, as vezes o servidor é grindo, provavelmente com as configurações regionais americanas, logo vc vai ter problemas com esse tipo de condificação.

Para vc não ter problemas com datas em um servidor com qualquer configuração regional, grave no banco de dados a data SEMPRE no formato internacional, no SQL Server é yyyy-MM-dd por exemplo: '2006-05-27'

Na hora de exibir, será de acordo com as configurações regionais, nesse casso, use o session.LCID para isso, no caso do brasil é 1046, assim, vc pode usar as constantes de formatação com a função FormatDateTime, as constantes vão de 0 até 4, caso queira formatar de uma forma diferente, aí crie uma função especifica para isso.

Mas lembre-se, sempre na hora de gravar no banco, grave em um formato internacional aceito pelo mesmo, geralmente é ano-mes-dia!


USUARIO.EXCLUIDOS 28/05/2007 12:40:13
#218491
Cara você pode usar esta função em javascript

function FormataData(input,pEvent) {
var evt = new CrossEvent(pEvent);
var keyCode = evt.keyCode;
var charCode = evt.charCode;
var strBarra = "/";
var strCheck = '0123456789';
if (keyCode == 8 || keyCode == 9) return true;
key = String.fromCharCode(charCode);
if (strCheck.indexOf(key) == -1) return false;
if (keyCode != 8 ){
if(input.value.length == 2){input.value = input.value+strBarra}
else if(input.value.length == 5){input.value = input.value+strBarra}
}
}

E na hora de retornar o valor para printar na tela ou incluir este valor no BD use assim:

SESSION.LCID = 1033

data = CDate(data)
Comandos....

Session.LCID = 1046
USUARIO.EXCLUIDOS 28/05/2007 13:36:49
#218499
Ai pessoal, muito obrigado pelas dicas, precisando estamos ai...
Acho q a melhor solução é essa mesma, na hora de gravar usar o padrão americano Session.LCID = 1033 e na hora de visualizar o brasileiro, Session.LCID = 1046

Vou fazer uns testes pra ver o que dá... Depois posto aqui pra vocês saberem o resultado!
USUARIO.EXCLUIDOS 28/05/2007 15:23:54
#218526
ei ei!!! o seguinte, existe a função CONVERT ou CAST na propria linguagem sql... assim vc nunca terá problemas com conversão de datas!!! vale a pena dar uma pesquisada... eu sempre uso!
Tópico encerrado , respostas não são mais permitidas