WebDix
Выпуск #12 | 2 февраля 2007Выпуск #12 | 2 февраля 2007
Колонка редактора
Веб-дизайн
Раскрутка
Заработок
Программирование
Уроки Photoshop
Уроки Flash
Журнал
Софт "Развлечения"
Юмор
Быстрый переход
WebDix › Выпуск #12 › Программирование

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

Автор: Неизвестен
Источник: upmark.ru/


Один из наиболее простых приемов. Про него почему-то забывают, указывая дату на страницах в совершенно неудобоваримом виде, типа 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 зависят от операционной системы.





« Своя рассылка на PHPСодержаниеШапка Санта-Клауса »
Copyright © 2007 RusForumz.com. Дизайн иконок - Mormegil.

Авторы журнала: Nikitar, Exact, Alisha, Psi. Общий дизайн - Nikitar
Перепечатка материалов запрещена.

По поводу использования материалов обращайтесь на e-mail
Журнал WebDix («Это веб-диз, детка!»), 2006-2008.
Сайт журнала: webdix.ru · форум: rusforumz.com
Об архиве
Рейтинг Old-Web