Портал для веб-мастера
Вход пользователей
Поиск статей
WoWeb.ru » Статьи » Программирование для Web » PHP

Дата по-человечески.

Один из наиболее простых приемов. Про него почему-то забывают, указывая дату на страницах в совершенно неудобоваримом виде, типа 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 = "&nbsp;"; print date("d").$delim.monthFromNum(date("m"),"L").$delim.date("Y")."г."; 

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

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

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

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

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

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

Автор: Дмитрий Шильников · Добавлена: 2002-07-04
Просмотров: 2537 · Рейтинг: 5.0

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела
Flash
Apache
WWW
PhotoShop
Веб-дизайн
Раскрутка и реклама
Базы данных
3D графика
Хостинг
Истории веб-мастеров
Web-технологии
Сетевая безопасность
Программирование для Web
Операционные системы

Новые статьи
Лучшие статьи
Популярные статьи
Комментируемые статьи
Разделы сайта
Скрипты
Статьи
Шрифты
Флэш исходники
HTML шаблоны
Партнерки
Клипарты
Смайлы
Фоны
Гифы
Иконки
Опрос сайта
Ведете ли вы блог?
Всего ответов: 60121
Наша кнопка
WoWeb.ru - портал для веб-мастера