Function que retorna mês(em Extenso) informando um número
03/05/2005
0
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
Post mais votado
03/05/2005
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
Tnaires
Mais Posts
03/05/2005
Crashovewrite
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;
03/05/2005
Crashovewrite
03/05/2005
Vinicius2k
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+
03/05/2005
Crashovewrite
Obrigado por Responder tbm gostei da sua clareza no código utilizarei no projeto vlw muito obrigado mesmo.
03/05/2005
Vinicius2k
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+
03/05/2005
Rômulo Barros
... 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:
03/05/2005
Massuda
03/05/2005
Vinicius2k
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+
Clique aqui para fazer login e interagir na Comunidade :)