domingo, 20 de janeiro de 2008

Função que escreve uma data por extenso.

function Dta_Extenso($ANO){

#Cria os arrays com os nomes por extensso.

$unidades = array('um','dois','três','quatro','cinco','seis','sete','oito','nove');
$outros = array('onze','doze','treze','quatorze','quinze','dezesseis','dezessete','dezoito','dezenove');
$dezenas = array('dez','vinte','trinta','quarenta','cinquenta','sessenta','setenta','oitenta','noventa');
$centenas = array('cem','duzentos','trezentos','quatrocentos','quinhentos','seicentos','setecentos','oitocentos','novecentos');
$milhares = array('mil');

#Separa o ano em dd, mm, yyyy
$sep = str_split($ANO);
$tam = count($sep);
if ($tam == 4){

#Milhares
$m = $unidades[$sep[0] -1]." mil";

#Centenas
if ($sep[1] <> 0){
$c = " e ".$centenas[$sep[1] - 1];
} else {#se as centenas forem 0
$c = "";
}

#Dezenas
if ($sep[2] <> 0){
if ($sep[2].$sep[3] >= 20){
$d = " e ".$dezenas[$sep[2] - 1];
#Unidades
if ($sep[3] <> 0){
$u = " e ".$unidades[$sep[3] - 1];
} else {
$u = "";
}
} elseif ($sep[2].$sep[3] == 10){
$d = " e ".$dezenas[0];
$u = "";
} else {#se as unidades forem 0
$d = " e ".$outros[$sep[3] -1];
$u = "";
}
} else {#se as dezenas forem 0
$d = "";

#Unidades
if ($sep[3] <> 0){
$u = " e ".$unidades[$sep[3] - 1];
} else {
$u = "";
}
}
}

return $m.$c.$d.$u;

}


#Exemplo:
print(Dta_Extenso("15/08/2007"));

#Saída:
#Quinze de Agosto de dois mil e sete.

#Limitações:
#A data deve estar no formato "dd/mm/yyyy"

#Versões futuras:
#Identifica, dada a data, o dia da semana, utilizando para isso
#congruência módulo M.