Дата по-человечески
Автор: Неизвестен
Источник: upmark.ru/
Один из наиболее простых приемов. Про него почему-то забывают, указывая дату
на страницах в совершенно неудобоваримом виде, типа
Сначала узнаем номер месяца:
$curDateD = date("d");
$curDateM = date("m"); # номер месяца
$curDateY = date("Y");
Номер месяца узнали, теперь нужна функция преобразования цифрового значения в буквенный. Назовем функцию monthFromNum. В качестве параметров вызова укажем:
- Номер месяца.
- В каком описании должно быть название месяца, то есть «январь» или «янв».
- Язык, на котором должно быть сообщено название месяца, то есть либо английский "january", либо русский «январь». В принципе, можно на любом языке. Пока остановимся на русском.
function monthFromNum($input, $type="S", $lang="R"){
if ($lang == "R"){
if ($type == "S"){
$Months = array("01"=>"янв","02"=>"фев",
"03"=>"мар","04"=>"апр",
"05"=>"май","06"=>"июн",
"07"=>"июл","08"=>"авг",
"09"=>"сен","10"=>"окт",
"11"=>"ноя","12"=>"дек");
}
elseif ($type == "L"){
$Months = array("01"=>"январь","02"=>"февраль",
"03"=>"март","04"=>"апрель",
"05"=>"май","06"=>"июнь",
"07"=>"июль","08"=>"август",
"09"=>"сентябрь","10"=>"октябрь",
"11"=>"ноябрь","12"=>"декабрь");
}
}
for (reset($Months); list($k,$v) = each($Months);) {
if ($input == $k){
return "$v";
}
}
// ---[покусано]---
>
Попытаемся учесть возможные значения:
- $input = от 1 до 12 (номер месяца)
- $type = "S", Short (короткое написание, «янв»)
- $type = "L", Long (полное написание, «январь»)
- $Lang = "R", Russian (русский)
- $Lang = "E", English (английский)
Вызов функции:
print "<b>$curDateD
".monthFromNum($curDateM;,"L")." $curDateY</b>";
После этого print напишет:
Но такой вид, кстати, тоже не катит. Хочется вместо
Полный код функции:
// php3
function monthFromNum($input, $type="S", $lang="ru"){
switch($lang){
case "ru":
if ($type == "S")
{ $Months = array("01"=>"янв","02"=>"фев","03"=>"мар",
"04"=>"апр","05"=>"май","06"=>"июн",
"07"=>"июл","08"=>"авг","09"=>"сен",
"10"=>"окт","11"=>"ноя","12"=>"дек");
}
elseif ($type == "L")
{ $Months = array("01"=>"января","02"=>"февраля","03"=>"марта",
"04"=>"апреля","05"=>"мая","06"=>"июня",
"07"=>"июля","08"=>"августа","09"=>"сентября",
"10"=>"октября","11"=>"ноября","12"=>"декабря");}
break;
default:
if ($type == "S")
{ $Months = array("01"=>"jan","02"=>"feb","03"=>"mar",
"04"=>"apr","05"=>"may","06"=>"jun",
"07"=>"jul","08"=>"aug","09"=>"sep",
"10"=>"oct","11"=>"nov","12"=>"dec");}
elseif ($type == "L")
{ $Months = array("01"=>"january","02"=>"february","03"=>"march",
"04"=>"april","05"=>"may","06"=>"june",
"07"=>"july","08"=>"august","09"=>"september",
"10"=>"october","11"=>"november","12"=>"december");
}
break;
}
if(isset($Months)){
for (reset($Months); list($k,$v) = each($Months);) {
if ($input == $k){
return $v;
}
}
}
return $input;
} # end of function
Более продвинутый способ вызова функции включает возможность указания символа в качестве разделителя:
$delim = " ";
print date("d").$delim.monthFromNum(date("m"),"L").$delim.date("Y")."г.";
Предлагаю именно — символ неразрывного пробела, иначе текст
даты может некрасиво разъехаться при определенных обстоятельствах. Или нужно
применять
Короткие замечания:
-
Данная функция предполагает обработку не только даты, но и может быть модифицирована для любых преобразований цифра -> слово.
-
Если необходимо работать только с датой, то эту функцию можно оставить в покое, :) и воспользоваться старым провереным способом — setlocale();
setlocale (LC_TIME, "russian");
print (strftime("%B.\n"));
Возможные значения LC_TIME зависят от операционной системы.