Dareean Опубликовано 12 Августа 2005 Жалоба Поделиться Опубликовано 12 Августа 2005 Итак по порядку Вот код:<?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 Поясните мне кто нить, что происходит? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
DANMASTER Опубликовано 13 Августа 2005 Жалоба Поделиться Опубликовано 13 Августа 2005 Проверь, возможно у тебя стоит другой формат даты. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SphinX Опубликовано 13 Августа 2005 Жалоба Поделиться Опубликовано 13 Августа 2005 Для PHP переменная типа integer вида 08 равна нулю, так что твоя конструкция switch аналогичнаcase 0: foo case 0: bar ...Либо убирай головные нули в case'ах, либо приводи значения case к типу string путём закавычивания. Первый способ, конечно, правильней. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 13 Августа 2005 Жалоба Поделиться Опубликовано 13 Августа 2005 case 01: $month = "Январь"; break; => case '01': $month = "Январь"; break; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vic'er Опубликовано 13 Августа 2005 Жалоба Поделиться Опубликовано 13 Августа 2005 Все можна сделать намного проще и короче :<?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 ) вынести за пределы функции Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dareean Опубликовано 13 Августа 2005 Автор Жалоба Поделиться Опубликовано 13 Августа 2005 Для PHP переменная типа integer вида 08 равна нулю, так что твоя конструкция switch аналогичнаcase 0: foo case 0: bar ...Либо убирай головные нули в case'ах, либо приводи значения case к типу string путём закавычивания. Первый способ, конечно, правильней.<{POST_SNAPBACK}> Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать? На самом деле я нашел решение убрав нули Но мне стало интересно почему 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 ) вынести за пределы функции <{POST_SNAPBACK}> Про проще я знаю, я просто учил человека и давал ему пример сравнения чисел, напоролся вот на такой косяк, стало интересно в чем дело. См. выше что мне стало интяресно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 14 Августа 2005 Жалоба Поделиться Опубликовано 14 Августа 2005 >> Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать? Это что значит ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dareean Опубликовано 15 Августа 2005 Автор Жалоба Поделиться Опубликовано 15 Августа 2005 >> Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать? Это что значит ?<{POST_SNAPBACK}>$date = date("Ymd");$month = substr($date,2,2); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 - Ты не умничай, ты пальцем покажи! (с) ГЭГ Словами скажи. Меня интересует слово "фокусировать". Что оно означает в данном контексте ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dareean Опубликовано 15 Августа 2005 Автор Жалоба Поделиться Опубликовано 15 Августа 2005 - Ты не умничай, ты пальцем покажи! (с) ГЭГ Словами скажи. Меня интересует слово "фокусировать". Что оно означает в данном контексте ?<{POST_SNAPBACK}> Блин, так я тебе пальцем и показал Вот как я задал в оригинале перменные, где переменной "месяц" присваивается 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 читает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
shwale Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 Dareean Изучай язык прежде, чем на нем писать Выдержка из мануала PHP:Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком (- или +). Если вы используете восьмеричную систему счисления, вы должны предварить число 0 (нулем), для использования шестнадцатеричной системы нужно поставить перед числом 0x. А как известно в восьмеричной системе не используются цифры 8 и 9.Азы ! Блин. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 shwale по-моему не из той оперы.дай ссылку. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
shwale Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 Songпо-моему не из той оперы.дай ссылку Из той.http://www.php.net/manual/ru/language.types.integer.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 >> Из той.это-то я всё понимаю, но я не понимаю, при чём тут функция date ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dareean Опубликовано 16 Августа 2005 Автор Жалоба Поделиться Опубликовано 16 Августа 2005 Вот я тоже не понял :shok: Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
shwale Опубликовано 16 Августа 2005 Жалоба Поделиться Опубликовано 16 Августа 2005 Songэто-то я всё понимаю, но я не понимаю, при чём тут функция date ?А кто тут писал, что проблема в функции date ???Я тут увидел это:Да а почему тогда если фокусировать на двух последних цифрах года (цифры 05) скрипт начинает работать?На самом деле я нашел решение убрав нули Но мне стало интересно почему 05 он читает, а 08 нетВ первом случае переменно присваиваются цифры -> YYYYmmddВо втором случае переменной $month присваиваются -> YYYYmmddВ первом случае case 08 не читает, а во втором 05 читает Ответ уже приведен. 08 и 09 работать не будут. Нет таких чисел. DareeanВот я тоже не понялИ что из вышенаписанного ты не понял ??? Прочитай еще раз: http://www.php.net/manual/ru/language.types.integer.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dareean Опубликовано 17 Августа 2005 Автор Жалоба Поделиться Опубликовано 17 Августа 2005 Вот теперь понял Ищо понял, что я лох Все равно array удобней Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.