Перейти к контенту

Короче косяк какой то непонятный...


Рекомендуемые сообщения

Итак по порядку :D

Вот код:

<?php

$date = date("Ymd");
date2($date);

function date2($date)
      {

$day = substr($date,6,2);
$month = substr($date,4,2);
$year = substr($date,0,4);

switch($month)
       {
 case 01: $month = "Январь"; break;
 case 02: $month = "Февраль"; break;
 case 03: $month = "Март"; break;
 case 04: $month = "Апрель"; break;
 case 05: $month = "Май"; break;
 case 06: $month = "Июнь"; break;
 case 07: $month = "Июль"; break;
 case 08: $month = "Август"; break;
 case 09: $month = "Сентябрь"; break;
 case 10: $month = "Октябрь"; break;
 case 11: $month = "Ноябрь"; break;
 case 12: $month = "Декабрь"; break;
       }
$date = "$day $month $year";
echo $date;

      }

?>

 

В результате месяц выводится цифрами ;)

Я уже что только не пробовал, даже головой бился о стену ;)

Если скажем я фокусирую $month = substr($date,4,2); на последние две цифры года $month = substr($date,2,2);, то пишет май :) Сейчас же 2005 :)

Поясните мне кто нить, что происходит? :)

Ссылка на комментарий
Поделиться на других сайтах

Проверь, возможно у тебя стоит другой формат даты.
Ссылка на комментарий
Поделиться на других сайтах

Для PHP переменная типа integer вида 08 равна нулю, так что твоя конструкция switch аналогична

case 0: foo
case 0: bar
...

Либо убирай головные нули в case'ах, либо приводи значения case к типу string путём закавычивания. Первый способ, конечно, правильней.

Ссылка на комментарий
Поделиться на других сайтах

Все можна сделать намного проще и короче ;):

<?php

$date = date("Ymd");
echo date2($date);

function date2($date){
 $_monthName = array(1=>"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря");
 list($year, $month, $day) = sscanf($date, "%04d%02d%02d");
 return $day." ".$_monthName[intval($month)]." ".$year;
}

?>

 

А еще лучше хеш названий месяцов ($_monthName ) вынести за пределы функции :D

Ссылка на комментарий
Поделиться на других сайтах

Для PHP переменная типа integer вида 08 равна нулю, так что твоя конструкция switch аналогична

case 0: foo
case 0: bar
...

Либо убирай головные нули в case'ах, либо приводи значения case к типу string путём закавычивания. Первый способ, конечно, правильней.

 

Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать? :)

На самом деле я нашел решение убрав нули :D Но мне стало интересно почему 05 он читает, а 08 нет :)

 

 

Все можна сделать намного проще и короче ;):

<?php

$date = date("Ymd");
echo date2($date);

function date2($date){
 $_monthName = array(1=>"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря");
 list($year, $month, $day) = sscanf($date, "%04d%02d%02d");
 return $day." ".$_monthName[intval($month)]." ".$year;
}

?>

 

А еще лучше хеш названий месяцов ($_monthName ) вынести за пределы функции  ;)

 

Про проще я знаю, я просто учил человека и давал ему пример сравнения чисел, напоролся вот на такой косяк, стало интересно в чем дело. См. выше что мне стало интяресно :)

Ссылка на комментарий
Поделиться на других сайтах

>> Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать?

 

Это что значит ?

Ссылка на комментарий
Поделиться на других сайтах

>> Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать?

 

Это что значит ?

$date = date("Ymd");

$month = substr($date,2,2);

Ссылка на комментарий
Поделиться на других сайтах

- Ты не умничай, ты пальцем покажи! (с) ГЭГ

 

Словами скажи. Меня интересует слово "фокусировать". Что оно означает в данном контексте ?

Ссылка на комментарий
Поделиться на других сайтах

- Ты не умничай, ты пальцем покажи! (с) ГЭГ

 

Словами скажи. Меня интересует слово "фокусировать". Что оно означает в данном контексте ?

 

Блин, так я тебе пальцем и показал :D

Вот как я задал в оригинале перменные, где переменной "месяц" присваивается 2 часла - пятое и шестое в строке даты (как раз date("m"); )

 

$date = date("Ymd");
$month = substr($date,4,2);

 

А вот то, во что я пальцем ткнул ;-)

Где месяц берет третие и четвертое число. ( это date("Y"); )

 

$date = date("Ymd");
$month = substr($date,2,2);

 

Разберем более детально.

echo $date; в данном случае на выходе даст нам строку

YYYYmmdd

В первом случае переменно присваиваются цифры -> YYYYmmdd

Во втором случае переменной $month присваиваются -> YYYYmmdd

В первом случае case 08 не читает, а во втором 05 читает ;)

Ссылка на комментарий
Поделиться на других сайтах

Dareean

 

Изучай язык прежде, чем на нем писать :D

 

Выдержка из мануала PHP:

Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком (- или +).

 

Если вы используете восьмеричную систему счисления, вы должны предварить число 0 (нулем), для использования шестнадцатеричной системы нужно поставить перед числом 0x.

 

А как известно в восьмеричной системе не используются цифры 8 и 9.

Азы ! Блин. ;)

Ссылка на комментарий
Поделиться на других сайтах

>> Из той.

это-то я всё понимаю, но я не понимаю, при чём тут функция date ?

Ссылка на комментарий
Поделиться на других сайтах

Song

это-то я всё понимаю, но я не понимаю, при чём тут функция date ?

А кто тут писал, что проблема в функции date ???

Я тут увидел это:

Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать?

На самом деле я нашел решение убрав нули Но мне стало интересно почему 05 он читает, а 08 нет

В первом случае переменно присваиваются цифры -> YYYYmmdd

Во втором случае переменной $month присваиваются -> YYYYmmdd

В первом случае case 08 не читает, а во втором 05 читает

 

Ответ уже приведен. 08 и 09 работать не будут. Нет таких чисел.

 

Dareean

Вот я тоже не понял

И что из вышенаписанного ты не понял ??? :D

Прочитай еще раз: http://www.php.net/manual/ru/language.types.integer.php

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.