написал такой скрипт ну есть одно но Код (Text): function megaDate($date, $time, $func = false, $full = false){ global $tpl, $server_time; $date_comm = $date; 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 if(date('Y-m-d', $date_comm) == date('Y-m-d', $server_time)) return $tpl->set('{date}', langdate('сегодня в H:i', $date_comm)); elseif(date('Y-m-d', $date_comm) == date('Y-m-d', ($server_time-84600))) return $tpl->set('{date}', langdate('вчера в H:i', $date_comm)); else if($func == 'no_year') return $tpl->set('{date}', langdate('j M в H:i', $date_comm)); else if($full) return $tpl->set('{date}', langdate('j F Y в H:i', $date_comm)); else return $tpl->set('{date}', langdate('j M Y в H:i', $date_comm)); } подскажите почему вот эти условия не работают, может я как то не правильно написал его? 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
пускай $date = 59 смтрим первое условие: 59<59 не верно нужно туда добавить еще "=" или же продумать как сделать по другому. как только первое условие окажется ложным, выполнится второе условие, и тут что мы видим, and?? во первыйх, тут автоматом окажется ложным первое условие, второе условие тру, но глупо делить 59 на 60 и так далее, подставляйте данные, сделайте отладочный вывод в браузер, чтобы видеть что происходит с кодом во время выполнения. и вместо "and" используйте "||"
В обоих случаях интерпретатор прекращает выполнение вычислений, если результат выражения уже предопределен. if (1 | $i++) - $i++ выполнится в процессе вычисления условия в скобках if (1 || $i++) - интерпретатор даже не дойдет до $i++, потому что (1 || что угодно) всегда дает true, и не нужно лишний раз напрягаться и считать дальше. Аналогично с &/&&
Хыиуду нихыиуду же себе. это шо ща было? || - возвращает 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 секунд: буквенные имеют лоу-приорити при разрешении условия.
Ишь ты, и правда. Вот что значит, bitwise-операторы забыл, как только с Дельфи ушел. https://php.net/manual/ru/language.operators.logical - вот тут все разжевано