Реклама на сайте Advertise with us

РНР Писать дату прописью

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 05/02/07 в 19:19       Ответить с цитатойцитата 

Ищу функцию, возвращающую переданную дату прописью на русском языке, вроде "первое января тысяча сто второго года"

ВОСТОРГ ЗНАЧИТ BMW

0
 



С нами с 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.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »