За последние 24 часа нас посетили 17758 программистов и 1677 роботов. Сейчас ищут 872 программиста ...

Увеличение даты на день + вывод русского месяца.

Тема в разделе "PHP для новичков", создана пользователем KiFF86, 26 апр 2010.

  1. KiFF86

    KiFF86 Активный пользователь

    С нами с:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте, нашел пару вариантов увеличения даты и вывода русского месяца..
    вот что получилось:
    Код (Text):
    1.  
    2. <?php
    3.    $tomorrow = date ('Y-m-d', strtotime ('+1 days'));
    4.     $yesterday = date ('Y-m-d', strtotime ('-1 days'));
    5.     $date = explode(".", date("d.m.Y"));
    6.     switch ($date[1])
    7.     {
    8.      case 1: $m='января'; break;
    9.      case 2: $m='февраля'; break;
    10.      case 3: $m='марта'; break;
    11.      case 4: $m='апреля'; break;
    12.      case 5: $m='мая'; break;
    13.      case 6: $m='июня'; break;
    14.      case 7: $m='июля'; break;
    15.      case 8: $m='августа'; break;
    16.      case 9: $m='сентября'; break;
    17.     case 10: $m='октября'; break;
    18.      case 11: $m='ноября'; break;
    19.      case 12: $m='декабря'; break;
    20.     }
    21.     $ru_tom = explode("-", $tomorrow);
    22.     switch ($ru_tom[1])
    23.     {
    24.      case 1: $m1='января'; break;
    25.      case 2: $m1='февраля'; break;
    26.      case 3: $m1='марта'; break;
    27.      case 4: $m1='апреля'; break;
    28.      case 5: $m1='мая'; break;
    29.      case 6: $m1='июня'; break;
    30.      case 7: $m1='июля'; break;
    31.      case 8: $m1='августа'; break;
    32.      case 9: $m1='сентября'; break;
    33.     case 10: $m1='октября'; break;
    34.      case 11: $m1='ноября'; break;
    35.      case 12: $m1='декабря'; break;
    36.     }
    37.     $ru_yes = explode("-", $yesterday);
    38.     switch ($ru_yes[1])
    39.     {
    40.      case 1: $m2='января'; break;
    41.      case 2: $m2='февраля'; break;
    42.      case 3: $m2='марта'; break;
    43.      case 4: $m2='апреля'; break;
    44.      case 5: $m2='мая'; break;
    45.      case 6: $m2='июня'; break;
    46.      case 7: $m2='июля'; break;
    47.      case 8: $m2='августа'; break;
    48.      case 9: $m2='сентября'; break;
    49.     case 10: $m2='октября'; break;
    50.      case 11: $m2='ноября'; break;
    51.      case 12: $m2='декабря'; break;
    52.     }
    53.   ?>
    54.  
    55.   <div class="shots">
    56.    <div class="first_shot"><?php echo $ru_yes[2]." ".$m2."<br>".$ru_yes[0]; ?></div>
    57.    <div class="second_shot"><?php echo $date[0]." ".$m."<br>".$date[2]; ?></div>
    58.    <div class="third_shot"><?php echo $ru_tom[2]." ".$m1."<br>".$ru_tom[0]; ?></div>
    59.   </div>
    Но, хоть я и новичок, чует мое сердце, что можно все это упростить... а то уж больно громоздко все выглядит...
    Подскажите как оптимизировать.[/code]
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Подход неверный совершенно.
    Через 15 минут напишу (если до меня никто этого не сделает).
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. /**
    4.  * Массив с названиями месяцев
    5.  * в родительном падеже
    6.  */
    7. $months = array(1 =>
    8.     "января",
    9.     "февраля",
    10.     "марта",
    11.     "апреля",
    12.     "мая",
    13.     "июня",
    14.     "июля",
    15.     "августа",
    16.     "сентября",
    17.     "октября",
    18.     "ноября",
    19.     "декабря"
    20. );
    21.  
    22. /**
    23.  * Переберем дни и сформируем дату
    24.  */
    25. foreach(array("yesterday", "today", "tomorrow") as $day) {
    26.     ${$day} = sprintf("%d %s %d",
    27.         date("d", strtotime($day)),
    28.         $months[date("n", strtotime($day))],
    29.         date("Y", strtotime($day))
    30.     );
    31. }
    32.  
    33. ?>
    34. <div>
    35.     <div><?=$yesterday?></div>
    36.     <div><?=$today?></div>
    37.     <div><?=$tomorrow?></div>
    38. </div>
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  5. KiFF86

    KiFF86 Активный пользователь

    С нами с:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Apple

    Ну подход во всяком случае рабочий, просто он не рациональный.

    Вопрос по вашему коду: мне необходимо вывести дату чтобы после месяца был переход на следующую строку. В вашем примере дата будет выведена в одну строчку.

    P.S. А в функции sprintf можно указать тэг <br>... понятно. Спасибо, буду разбираться)
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну внесите изменения в код.
     
  7. KiFF86

    KiFF86 Активный пользователь

    С нами с:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    26 строчка пока непонятна.. ${$day} - что это за конструкция?
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А откуда по-вашему переменные $today, $yesterday появились, а? =)
     
  9. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    PHP:
    1.  
    2. <?php
    3.  
    4.     // Где-то на старте системы или в php.ini
    5.     setlocale(LC_ALL, 'ru_RU');
    6.  
    7.  
    8.     echo strftime('%d-%B', time() - 86400);
    9.     echo strftime('%d %B');
    10.     echo strftime('%d %B', time() + 86400);
    11.  ?>
    12.  
    UPD на *nix при условиях наличия нужных локалей с кодировками (locale -a | grep ru) работает точно.
    Окончания месяцев... Хм... ну как-то там оно на уровне локали исправлялось вроде как :)
     
  10. KiFF86

    KiFF86 Активный пользователь

    С нами с:
    2 дек 2009
    Сообщения:
    18
    Симпатии:
    0
    Apple
    Понятно, то есть для каждого элемента массива создается переменная.
    Не понятно теперь почему в yesterday попадает предыдущая дата, а в tomorrow следующая?...

    Даже скорее не понятно как получается yesterday.. потому что к нему потом, как я понял добавляется strtotime ($day)...
    Не понял почему отсчет идет со вчерашнего дня..
     
  11. mahmudchon

    mahmudchon Активный пользователь

    С нами с:
    19 сен 2010
    Сообщения:
    6
    Симпатии:
    0
    Спасибо!