• Страница 1 из 1
  • 1
Дата по-человечески.
otpmДата: Суббота, 10.Янв.2009, 10:35 | Сообщение # 1
Admin
Сообщений: 554
« 3 »
Статус: :-(
Один из наиболее простых приемов. Про него почему-то забывают, указывая дату на страницах в совершенно неудобоваримом виде, типа 10/10/00 или 2001-05-01. Хорошо если в таких датах присутствует число более 12-и — становится понятно, где указан день, а где месяц. Но от этого легче не становится.

Сначала узнаем номер месяца:

$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 напишет: 11 март 2001

Но такой вид, кстати, тоже не катит. Хочется вместо «11 март 2001» видеть «11 марта 2001г.»

Полный код функции:

// 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")."г.";

Предлагаю именно   — символ неразрывного пробела, иначе текст даты может некрасиво разъехаться при определенных обстоятельствах. Или нужно применять <nobr>11 марта 2001г.</nobr>

Короткие замечания:

*

Данная функция предполагает обработку не только даты, но и может быть модифицирована для любых преобразований цифра -> слово.
*

Если необходимо работать только с датой, то эту функцию можно оставить в покое, smile и воспользоваться старым провереным способом — setlocale();

setlocale (LC_TIME, "russian"); print (strftime("%B.\n"));

Возможные значения LC_TIME зависят от операционной системы.


Заработок для веб-мастеров
 
  • Страница 1 из 1
  • 1
Поиск:

Счетчик тИЦ и PR