[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Получить наименование месяца по номеру месяца
Мир
Мне надо по номеру месяца получить наименование месяца.
Считаю,что Мне надо выделить месяц без значащих нулей.В нижестоящем примере я выделила месяц,но он-2-хзначное число.
Я делаю так:

$mon=substr($datek,5,2); // из выбранной даты выделили месяц (гггг-мм-дд)

$months = Array(1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь','июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
echo $months[$mon]


Наименование месяца верно отображается,если значения месяца -2-х значное число.Если же номер месяца меньше 10,то наименование не получаю из массива.
Кто знает- помогите.Спасибо.



Спустя 6 минут, 5 секунд (24.11.2011 - 16:43) TranceIT написал(а):

$mon = substr($datek,5,2); // из выбранной даты выделили месяц (гггг-мм-дд)
if ($mon < 10)
$mon = substr($mon, 1); // Если месяц 1-9 обрезаем начальный ноль

$months = Array(1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь','июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
echo $months[$mon]

Спустя 3 минуты, 13 секунд (24.11.2011 - 16:46) Placido написал(а):
Нужно $mon привести к типу INT
$mon=substr($datek,5,2)*1;          // из выбранной даты выделили месяц (гггг-мм-дд)

$months = Array(1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь','июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
echo $months[$mon]

Спустя 10 минут, 52 секунды (24.11.2011 - 16:57) Winston написал(а):
Достаточно так написать
echo $months[(int)$mon];

Спустя 2 минуты, 5 секунд (24.11.2011 - 16:59) m4a1fox написал(а):
Когда то накарябал вот это, не без помощи конечно! :)

function cor_date($date) {
$date = explode("-", $date);
$month = array(
'01' => 'Янв.',
'02' => 'Фев.',
'03' => 'Март',
'04' => 'Апр.',
'05' => 'Май',
'06' => 'Июнь',
'07' => 'Июль',
'08' => 'Авг.',
'09' => 'Сен.',
'10' => 'Окт.',
'11' => 'Ноябрь',
'12' => 'Декабрь',
);


foreach ($month as $key=>$value) {
if($key == $date[1]);
}
return $date[2].' '.$month[$date[1]];
}

Спустя 15 минут, 8 секунд (24.11.2011 - 17:15) Winston написал(а):
Цитата (m4a1fox @ 24.11.2011 - 15:59)
foreach ($month as $key=>$value) {
        if($key == $date[1]); 
    }
      return $date[2].' '.$month[$date[1]];

blink.gif

Спустя 3 минуты, 48 секунд (24.11.2011 - 17:18) m4a1fox написал(а):
Winston
Ну ректально конечно - но работает! smile.gif Там по совести говоря - вариантов решения именно этой проблемы - очень много! Это один из них! Пусть не ахти...но работает! smile.gif

Спустя 2 минуты, 12 секунд (24.11.2011 - 17:21) Winston написал(а):
Цитата (m4a1fox @ 24.11.2011 - 15:59)
if($key == $date[1]);

Офигеть, первый раз вижу такую запись if'а

Спустя 8 минут, 56 секунд (24.11.2011 - 17:29) m4a1fox написал(а):
Winston
Цитата
Офигеть, первый раз вижу такую запись if'а

А! Не знаю! Не задумывался. Как я понимаю, тут автоматически true возвращается! ДА? Это удивило?! Или я чего не понимаю...

Спустя 1 час, 36 минут, 22 секунды (24.11.2011 - 19:06) I++ написал(а):
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
echo strftime('%B', strtotime('2011-09-22'));

Если хостинг кривой, пинаем хостера.

Спустя 1 час, 53 минуты, 22 секунды (24.11.2011 - 20:59) twin написал(а):
Цитата (m4a1fox @ 24.11.2011 - 14:29)
Winston
Цитата
Офигеть, первый раз вижу такую запись if'а

А! Не знаю! Не задумывался. Как я понимаю, тут автоматически true возвращается! ДА? Это удивило?! Или я чего не понимаю...

Зря не задумывался)))
Что вообще делает этот код?
foreach ($month as $key=>$value) {
if($key == $date[1]);
}

Спустя 35 минут, 43 секунды (24.11.2011 - 21:35) m4a1fox написал(а):
twin
Давайте логически рассуждать!
foreach ($month as $key=>$value) {   // разбивает массив с датами на значение - 01-12 и ссілку знаяения - январь-декабрь     
if($key == $date[1]); // если значение равно сторому значению из массива date то возвращает true
}

Если не верно, то прошу обїяснить, или направить на верній ответ! Буду признателен!

Спустя 8 часов, 19 минут, 29 секунд (25.11.2011 - 05:54) Invis1ble написал(а):
m4a1fox
Цитата
if($key == $date[1]); // если значение равно сторому значению из массива date то возвращает true

ничегошеньки там не возвращается, тупо холостой цикл.
А по теме - I++ самое нормальное решение дал, однако оно зависит от локали.

Спустя 4 часа, 15 минут, 1 секунда (25.11.2011 - 10:09) I++ написал(а):
echo cor_date('2011-01-22');

function cor_date($date)
{
$date = explode("-", $date);
static $month = array('Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноябрь','Декабрь');

return $date[2].' '.$month[(int)$date[1]-1];
}
static есть смысл объявлять только если за время работы скрипта функция будет часто вызываться. (дает примерно двукратный прирост)

Benchmark 100000 итераций (меньше лучше):


$mon=substr($datek,5,2); // из выбранной даты выделили месяц (гггг-мм-дд)
$months = Array(1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь','июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
$months[$mon];


0.335165977478

$mon = substr($datek,5,2);          // из выбранной даты выделили месяц (гггг-мм-дд)
if ($mon < 10)
$mon = substr($mon, 1); // Если месяц 1-9 обрезаем начальный ноль

$months = Array(1 => 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь','июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');


0.337824106216

function cor_date2($date) {
$date = explode("-", $date);
$month = array(
'01' => 'Янв.',
'02' => 'Фев.',
'03' => 'Март',
'04' => 'Апр.',
'05' => 'Май',
'06' => 'Июнь',
'07' => 'Июль',
'08' => 'Авг.',
'09' => 'Сен.',
'10' => 'Окт.',
'11' => 'Ноябрь',
'12' => 'Декабрь',
);


foreach ($month as $key=>$value) {
if($key == $date[1]);
}
return $date[2].' '.$month[$date[1]];
}


0.816137075424

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
echo strftime('%B', strtotime('2011-09-22'));


Цитата
А по теме - I++ самое нормальное решение дал, однако оно зависит от локали.


Самое короткое, но не лучшее.

3,54256796837

function cor_date($date)
{
$date = explode("-", $date);
static $month = array('Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноябрь','Декабрь');

return $date[2].' '.$month[(int)$date[1]-1];
}


0,215945005417

function cor_date($date)
{
$date = explode("-", $date);
$month = array('Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноябрь','Декабрь');

return $date[2].' '.$month[(int)$date[1]-1];
}


0,414947032928

function cor_date($date)
{
$date = explode("-", $date);
static $month = array(1=>'Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноябрь','Декабрь');

return $date[2].' '.$month[(int)$date[1]];
}


0,201259851456

function cor_date($date)
{
$date = explode('-', $date);
static $month = array(1=>'Янв.','Фев.','Март','Апр.','Май','Июнь','Июль','Авг.','Сен.','Окт.','Ноябрь','Декабрь');

return $date[2].' '.$month[(int)"$date[1]"];
}


0,193631887436

:)

Спустя 10 минут, 5 секунд (25.11.2011 - 10:19) Invis1ble написал(а):
I++
Цитата
Самое короткое, но не лучшее.

я про краткость и говорил, не думаю, что будет вызываться 100к раз wink.gif

Спустя 1 минута, 15 секунд (25.11.2011 - 10:21) Winston написал(а):
I++
Спасибо за замеры.
Эта пять smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.