За последние 24 часа нас посетили 30368 программистов и 1753 робота. Сейчас ищут 850 программистов ...

проблема с условием

Тема в разделе "PHP для новичков", создана пользователем wolf777, 28 окт 2014.

  1. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    написал такой скрипт ну есть одно но
    Код (Text):
    1.  
    2. function megaDate($date, $time, $func = false, $full = false){
    3.     global $tpl, $server_time;
    4.    
    5.     $date_comm = $date;
    6.  
    7.                 if($date<59){
    8.                     return $date." сек. назад";
    9.                 }elseif($date/60>1 and $date/60<59){
    10.                     return round($date/60)." мин. назад";
    11.                 }elseif($date/3600>1 and $date/3600<23){
    12.                     return round($date/3600)." час. назад";
    13.                 }else
    14.        
    15.     if(date('Y-m-d', $date_comm) == date('Y-m-d', $server_time))
    16.         return $tpl->set('{date}', langdate('сегодня в H:i', $date_comm));
    17.     elseif(date('Y-m-d', $date_comm) == date('Y-m-d', ($server_time-84600)))
    18.         return $tpl->set('{date}', langdate('вчера в H:i', $date_comm));
    19.     else
    20.         if($func == 'no_year')
    21.             return $tpl->set('{date}', langdate('j M в H:i', $date_comm));
    22.         else
    23.             if($full)
    24.                 return $tpl->set('{date}', langdate('j F Y в H:i', $date_comm));
    25.             else
    26.                 return $tpl->set('{date}', langdate('j M Y в H:i', $date_comm));
    27. }
    подскажите почему вот эти условия не работают, может я как то не правильно написал его?

    if($date<59){
    return $date." сек. назад";
    }elseif($date/60>1 and $date/60<59){
    return round($date/60)." мин. назад";
    }elseif($date/3600>1 and $date/3600<23){
    return round($date/3600)." час. назад";
    }else
     
  2. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    пускай $date = 59
    смтрим первое условие: 59<59 не верно нужно туда добавить еще "=" или же продумать как сделать по другому.
    как только первое условие окажется ложным, выполнится второе условие, и тут что мы видим, and??
    во первыйх, тут автоматом окажется ложным первое условие, второе условие тру, но глупо делить 59 на 60
    и так далее, подставляйте данные, сделайте отладочный вывод в браузер, чтобы видеть что происходит с кодом во время выполнения.
    и вместо "and" используйте "||"
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это "or". "and" это "&&"
     
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    а ну да. )))

    Добавлено спустя 19 секунд:
    поторопился)
     
  6. VaneS

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

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    кстати, а кто знает в чем отличие между:
    or и ||
    and и &&
     
  7. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    В обоих случаях интерпретатор прекращает выполнение вычислений, если результат выражения уже предопределен.
    if (1 | $i++) - $i++ выполнится в процессе вычисления условия в скобках
    if (1 || $i++) - интерпретатор даже не дойдет до $i++, потому что (1 || что угодно) всегда дает true, и не нужно лишний раз напрягаться и считать дальше.
    Аналогично с &/&&
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Хыиуду нихыиуду же себе. это шо ща было?

    || - возвращает true если хотя бы один из сравниваемых элементов имеет истинное значение.
    1 || 4 = true ибо и 1 и 4 логически истинное значение имеют
    1 || 0 || 4 = true ибо 1 истина и этого уже достаточно

    | - возвращает результат двоичного "или" между элементами.
    1|3 = 3 на уровне битов 01(2) "или" 11(2) = 11(2) = 3(10)
    1|4 = 5 на уровне битов 01(2) "или" 100(2) = 101(2) = 5(10)

    && - true только если все элементы истинны
    1 && 0 = false ибо ноль имеет логически ложное значение
    1 && 4 = true

    & - логическое "И" между элементами
    1|3 = 1 на уровне битов 01(2) "и" 11(2) = 01(2) = 1(10)
    1|4 = 0 на уровне битов 01(2) "и" 100(2) = 000(2) = 0(10)

    есть еще срань типа ^ ! >> << ~ - это тоже нужно пояснить?

    как бы позор ромашке...

    Добавлено спустя 5 минут 48 секунд:
    буквенные имеют лоу-приорити при разрешении условия.
     
  9. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5