С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579
|
Добавлено: 05/02/07 в 19:19 |
Ищу функцию, возвращающую переданную дату прописью на русском языке, вроде "первое января тысяча сто второго года"
|
|
|
|
С нами с 19.07.05
Сообщения: 318
Рейтинг: 401
|
Добавлено: 05/02/07 в 20:15 |
UPDATE:
Сорри, невнимательно прочел.
Для русского языка можно адаптировать тот класс, что я привел, либо использовать готовый многоязычный pear-class: Numbers Words.
Судя по lang.ru.php
русский язык поддерживается.
-----------------------------
spelloutnumbers.php: Код: | <?php
class spelloutnumbers {
function hundreds($number) {
$lasts = array('one','two','three','four','five','six','seven','eight','nine');
$teens = array('eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen');
$tens = array('ten','twenty-','thirty-','forty-','fifty-','sixty-','seventy-','eighty-','ninety-');
$many = array('', ' thousand ',' million ',' billion ',' trillion ');
$string = "";
$j = strlen($number);
$done = false;
for($i=0; $i<strlen($number); $i++) {
if($j==2) {
if(strlen($number)>2) {
if($number[0]!=0) {$string .= ' hundred ';}
}
if($number[$i]==1) {
if($number[$i+1]==0) {$string .= $tens[$number[$i]-1];}
else {
$string .= $teens[$number[$i+1]-1];
$done = true;
}
}
else {
if(!empty($tens[$number[$i]-1])) {$string .= $tens[$number[$i]-1].' ';}
}
}
elseif($number[$i]!=0 &&!$done) {$string .= $lasts[$number[$i]-1];}
$j--;
}
return $string;
}
function spellout($number,$suffix=0,$caps=1,$uk=0) {
$lasts = array('one','two','three','four','five','six','seven','eight','nine');
$teens = array('eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen');
$tens = array('ten','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety');
$many = array('', ' thousand ',' million ',' billion ',' trillion ');
$foo = strval($number);
$string = "";
if(strlen($foo)%3!=0) {
$string .= $this->hundreds(substr($number,0,strlen($number)%3));
$string .= $many[floor(strlen($number)/3)];
}
for($i=0; $i<floor(strlen($number)/3); $i++) {
$string .= $this->hundreds(substr($number,strlen($number)%3+($i*3),3));
if($number[strlen($number)%3+($i*3)]!=0) {
$string .= $many[floor(strlen($number)/3)-1-$i];
}
}
$match = array('/ +/','/- /','/-$/','/-thousand/','/-million/','/-billion/','/-trillion/');
$replace = array(' ','-','',' thousand',' million',' billion',' trillion');
$string = preg_replace($match,$replace,$string);
if($uk) {
$match = array('/billion/','/trillion/');
$replace = array('milliard','billion');
$string = preg_replace($match,$replace,$string);
}
if($suffix) {
$match = array('/ve$/','/t$/','/y$/','/one$/','/two$/','/three$/','/e$/');
$replace = array('fth','th','ieth','first','second','third','th');
$string = preg_replace($match,$replace,$string);
if(!preg_match("/first$¦second$¦third$¦th$/",$string)) {
$string .= "th";
}
}
if($caps) {
$string = ucwords($string);
$string = preg_replace("/(-[A-Z])/",strtolower("\\1"),$string);
}
$foo = strrpos($string," ");
if($foo!==false) {
$string = substr($string,0,$foo)." and".substr($string,$foo);
}
return $string;
}
}
?> |
Syntax: Код: |
include("spelloutnumbers.php");
$BLAH = new spelloutnumbers();
$myvar = $BLAH->spellout(number[,suffix[,caps[,uk]]]);
number is the number you want spelled out.
It can be an integer or a string. Range = 1 to 999.999.999.999.999
suffix can be set to 0 or 1.
1 = use ordinal suffix ("first" instead of "one" etc.). Default is 0.
caps can be set to 0 or 1.
1 = capitalize the words ("two Thousand" instead of "two thousand" etc.). Default is 1.
uk can be set to 0 or 1.
1 = use British standard ("milliard" instead of "billion" etc.). Default is 0.
|
Examples: Код: |
spellout(3) prints Three
spellout(3,1) prints third
spellout(3,1,0) prints third
spellout(2003) prints two Thousand and Three
spellout(2003,1) prints two Thousand and third
spellout(999999999999999) prints Nine hundred Ninety-nine Trillion Nine hundred Ninety-nine Billion Nine hundred Ninety-nine Million Nine hundred Ninety-nine Thousand Nine hundred and Ninety-nine
spellout(999999999999999,0,1,1) prints Nine hundred Ninety-nine Billion Nine hundred Ninety-nine Milliard Nine hundred Ninety-nine Million Nine hundred Ninety-nine Thousand Nine hundred and Ninety-nine
spellout(990) prints Nine hundred and Ninety
spellout(990,1) prints Nine hundred and Ninetieth
spellout(990,1,0) prints nine hundred and ninetieth
|
Ну и + библиотечная getdate.
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|