За последние 24 часа нас посетили 23564 программиста и 1664 робота. Сейчас ищет 821 программист ...

как правильно прибавить месяц date("m");

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

  1. BMWSauber

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

    С нами с:
    21 ноя 2009
    Сообщения:
    151
    Симпатии:
    0
    здраствуйте, такая проблема
    $mon=date("m"); получяем 02
    $mon2=date("m")+1; получяем 3

    как правильно сделать чтоб $mon2 была "03" ?
     
  2. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    date("m"); возвращает тебе string
    а date("m")+1; уже возвращает int,
    просто сделай вот такую проверку:

    PHP:
    1. $mon2=date("m")+1;
    2. $mon2 = ( $mon2<10 ? "0".$mon2 : $mon2 );
     
  3. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    sprintf и никаких проверок
     
  4. BMWSauber

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

    С нами с:
    21 ноя 2009
    Сообщения:
    151
    Симпатии:
    0
    можно подробнее
     
  5. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А документацию по функции посмотреть?

    PHP:
    1. <?php
    2.  
    3. printf("%02u", (date('m') + 1));
    4.  
    5. ?>
     
  6. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    а если date("m") вернет 12, тоже прибавляете?
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    С какого-такого перепугу?
    У нас же указано, что число должно состоять из двух цифр.
    В нашем случае это называется zero-filled.
     
  8. BMWSauber

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

    С нами с:
    21 ноя 2009
    Сообщения:
    151
    Симпатии:
    0
    всеравно не пашет... задача - получить значение переменных $day, $month, $year циклом на 30 дней, начиная с сегоднешнего.



    PHP:
    1. <?
    2.  
    3. $year=date("Y");
    4. $month=date("n");
    5. $day=date("d");
    6. $lm=date("t");
    7.  
    8.  
    9. for ($i=0; $i<=30; $i++)
    10.  
    11. {
    12.  
    13. if ($day>$lm){$day=1; $month++;}
    14. if ($day<10){$day="0".$day;}
    15.  
    16.  $month = ( $mon2<10 ? "0".$month : $month );
    17.  
    18. echo "$day.$month <br>";
    19.  
    20. $day++;
    21.  
    22. }
    23.  
    24. ?>
    25.  
    а вот результат..

    Код (Text):
    1. 21.02
    2. 22.002
    3. 23.0002
    4. 24.00002
    5. 25.000002
    6. 26.0000002
    7. 27.00000002
    8. 28.000000002
    9. 01.03
    10. 02.003
    11. 03.0003
    12. 04.00003
    13. 05.000003
    14. 06.0000003
    15. 07.00000003
    16. 08.000000003
    17. 09.0000000003
    18. 10.00000000003
    19. 11.000000000003
    20. 12.0000000000003
    21. 13.00000000000003
    22. 14.000000000000003
    23. 15.0000000000000003
    24. 16.00000000000000003
    25. 17.000000000000000003
    26. 18.0000000000000000003
    27. 19.00000000000000000003
    28. 20.000000000000000000003
    29. 21.0000000000000000000003
    30. 22.00000000000000000000003
    31. 23.000000000000000000000003
    помогите пож.
     
  9. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. /**
    4.  * Первый вариант - разделение.
    5.  * Т.е мы получаем массив дат, без форматирования
    6.  **/
    7. $timestamp = array();
    8.  
    9. for($i = 1; $i <= 30; $i++) {
    10.     $timestamp[] = strtotime("+{$i} day");
    11. }
    12.  
    13. /**
    14.  * Второй вариант включает полное форматирование
    15.  * данных функцией date уже на этапе генерации
    16.  **/
    17. $timestamp = array();
    18.  
    19. for($i = 1; $i <= 30; $i++) {
    20.     $timestamp[] = date('d.m.Y', strtotime("+{$i} day"));
    21. }
    22.  
    23. // Выводим (второй вариант)
    24. echo "<pre>" . print_r($timestamp, true) . "</pre>";
    25.  
    26.  
    27. ?>
     
  10. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    И вообще блин, учитесь думать самостоятельно, если хотите быть программистами.
    А-то вот Joost - сообщений в два раза больше моего, а нихрена до сих пор не умеет.
     
  11. BMWSauber

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

    С нами с:
    21 ноя 2009
    Сообщения:
    151
    Симпатии:
    0
    Спасибо получилочь..
     
  12. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    я имел ввиду что date("m")+1 не корректно, ибо может вернуть 12, и след месяц должен быть 01.
     
  13. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Поэтому я сторонник использования strtotime как в примере выше =)
     
  14. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    да, strtotime решает эти проблемы, жаль в JS такого нету, хотя... надо погуглить.