Function que retorna mês(em Extenso) informando um número
Dae Galera mais uma vez peço a ajuda de vocês tenho o seguine problema:
Gostaria de Fazer uma Função que Retorne o Mês(em Extenso) informando apenas o número do mês entre 1 à 12. Algo como:
Tipo tenho um campo Data e uma variável mes onde a var mes vai receber um Copy extraindo apenas o número do Mês aplicando a um campo calculado.
Ex: SQLNotaMes.Value:= ExtensoMes(5); //onde SQLNota é um SimpleDataSet e Mes é um Campo Calculado.
Gostaria de Fazer uma Função que Retorne o Mês(em Extenso) informando apenas o número do mês entre 1 à 12. Algo como:
function FrmPrincipal.ExtensoMes(n: Integer): String; begin Case n Of 01 : n:= ´Janeiro´; 02 : n:= ´Fevereiro´; 03 : n:= ´Março´; 04 : n:= ´Abril´; 05 : n:= ´Maio´; 06 : n:= ´Junho´; 07 : n:= ´Julho´; 08 : n:= ´Agosto´; 09 : n:= ´Setembro´; 10 : n:= ´Outubro´; 11 : n:= ´Novembro´; 12 : n:= ´Dezembro´; end;
Tipo tenho um campo Data e uma variável mes onde a var mes vai receber um Copy extraindo apenas o número do Mês aplicando a um campo calculado.
Ex: SQLNotaMes.Value:= ExtensoMes(5); //onde SQLNota é um SimpleDataSet e Mes é um Campo Calculado.
Crashovewrite
Curtidas 0
Melhor post
Tnaires
03/05/2005
Olá
Se vc tiver usando isso pra formatar data, vc pode usar a função FormatDateTime passando a seguinte string de formato:
Por exemplo, formatando a data 01/01/2005, ele retorna 01 de janeiro de 2005.
Abraços
Se vc tiver usando isso pra formatar data, vc pode usar a função FormatDateTime passando a seguinte string de formato:
´dd "de" mmmm "de" yyyy´
Por exemplo, formatando a data 01/01/2005, ele retorna 01 de janeiro de 2005.
Abraços
GOSTEI 1
Mais Respostas
Crashovewrite
03/05/2005
Dae Galera Descobri oque estava fazendo de errado
o n dos números de 01 à 12 troquei por result... ficando assim
function FrmPrincipal.ExtensoMes(n: Integer): String; begin Case n Of 01 : n:= ´Janeiro´; 02 : n:= ´Fevereiro´; 03 : n:= ´Março´; 04 : n:= ´Abril´; 05 : n:= ´Maio´; 06 : n:= ´Junho´; 07 : n:= ´Julho´; 08 : n:= ´Agosto´; 09 : n:= ´Setembro´; 10 : n:= ´Outubro´; 11 : n:= ´Novembro´; 12 : n:= ´Dezembro´; end; end;
o n dos números de 01 à 12 troquei por result... ficando assim
function TQRNota.ExtensoMes(n: Integer): String; begin Case n Of 01 : result:= ´Janeiro´; 02 : result:= ´Fevereiro´; 03 : result:= ´Março´; 04 : result:= ´Abril´; 05 : result:= ´Maio´; 06 : result:= ´Junho´; 07 : result:= ´Julho´; 08 : result:= ´Agosto´; 09 : result:= ´Setembro´; 10 : result:= ´Outubro´; 11 : result:= ´Novembro´; 12 : result:= ´Dezembro´; end; end;
GOSTEI 1
Crashovewrite
03/05/2005
[b:c3fd792b5a]tnaires[/b:c3fd792b5a] muito obrigado por postar mas não estava querendo formatar a data, mesmo assim obrigado, fuçando aqui eu descobri oque estava acontecendo de errado como havia dito troquei o n por result para retornar o resultado, ou seja, o Mês em extenso....
GOSTEI 0
Vinicius2k
03/05/2005
Colega,
A mesma função, apenas de uma forma mais sucinta. Também evite o uso do Copy neste caso, pois vc pode ter problemas com configurações regionais da máquina. Em substituição utilize MonthOf da unit DateUtils, como segue :
T+
A mesma função, apenas de uma forma mais sucinta. Também evite o uso do Copy neste caso, pois vc pode ter problemas com configurações regionais da máquina. Em substituição utilize MonthOf da unit DateUtils, como segue :
... uses DateUtils; function ExtensoMes(n: Integer): String; const aMeses: Array[0..11] of String = ( ´Janeiro´, ´Fevereiro´, ´Março´, ´Abril´, ´Maio´, ´Junho´, ´Julho´, ´Agosto´, ´Setembro´, ´Outubro´, ´Novembro´, ´Dezembro´); begin Result := ´´; if (n > 1) and (n < 12) then Result := aMeses[n-1]; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(ExtensoMes(MonthOf(Date))); end;
T+
GOSTEI 0
Crashovewrite
03/05/2005
[b:63df3aad16]Vinicius2K[/b:63df3aad16]
Obrigado por Responder tbm gostei da sua clareza no código utilizarei no projeto vlw muito obrigado mesmo.
Obrigado por Responder tbm gostei da sua clareza no código utilizarei no projeto vlw muito obrigado mesmo.
GOSTEI 0
Vinicius2k
03/05/2005
Só uma correção :
onde lê-se :
leia-se :
Da forma que estava, os meses de Janeiro e Dezembro não seriam retornados. Desculpe-me pelo código errado.
T+
onde lê-se :
if (n > 1) and (n < 12) then
leia-se :
if (n >= 1) and (n <= 12) then
Da forma que estava, os meses de Janeiro e Dezembro não seriam retornados. Desculpe-me pelo código errado.
T+
GOSTEI 0
Rômulo Barros
03/05/2005
Colega,
A mesma função, apenas de uma forma mais sucinta. Também evite o uso do Copy neste caso, pois vc pode ter problemas com configurações regionais da máquina. Em substituição utilize MonthOf da unit DateUtils, como segue :
T+
... uses DateUtils; function ExtensoMes(n: Integer): String; const aMeses: Array[0..11] of String = ( ´Janeiro´, ´Fevereiro´, ´Março´, ´Abril´, ´Maio´, ´Junho´, ´Julho´, ´Agosto´, ´Setembro´, ´Outubro´, ´Novembro´, ´Dezembro´); begin Result := ´´; if (n > 1) and (n < 12) then Result := aMeses[n-1]; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(ExtensoMes(MonthOf(Date))); end;
Boa. Esta aí uma solução bastante simples e pouca utilizada por desenvolvedores. A Clareza do código é essencial para o desenvolvimento em equipe, facilitando assim a compreenção do método pelos desenvolvedores. Bela solulão, Vina !!!! :wink:
GOSTEI 0
Massuda
03/05/2005
Não seria mais prático usar os valores no array LongMonthNames[] definido em SysUtils? Esse array contem os nomes dos meses no idioma em uso no Windows.
GOSTEI 0
Vinicius2k
03/05/2005
Não seria mais prático usar os valores no array LongMonthNames[] definido em SysUtils?
Mas com toda certeza seria ! :roll:
function ExtensoMes(n: Integer): String; begin Result := ´´; if (n >= 1) and (n <= 12) then Result := LongMonthNames[n]; end;
Vez por outra, por desconhecimento ou esquecimento, a gente acaba por reinventar a roda... Já fiz isso ´n´ vezes e costumo ´guardar´ como prova... Essa foi uma delas :
{ **** Adiciona meses à uma data fixando o dia PS: Legítima reinvenção da roda... a "SysUtils" tem a função IncMonth que faz exatamente isso... :\ **** } function IncMes(AData: TDate; AMeses: Integer): TDate; var Dia, Mes, Ano, I: Integer; begin Ano := YearOf(AData); Mes := MonthOf(AData); for I := 1 to AMeses do begin Inc(Mes); if Mes > 12 then begin Mes := 1; Inc(Ano); end; end; Dia := DayOf(AData); if (Dia in [29, 30, 31]) and (Mes = 2) then if IsLeapYear(Ano) then Dia := 29 else Dia := 28; if (Dia = 31) and (Mes in [4, 6, 9, 11]) then Dia := 30; { **** } Result := EncodeDate(Ano, Mes, Dia); end;
T+
GOSTEI 0