Код (PHP): <?php $people = file_get_contents ('json.php'); $list = json_decode ($people, true); foreach ($list as &$item) { for($i=1; $i<1000; $i++) { if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 ) { echo ($item[$i]['uid']."<br>"); } } } ?> В массиве $list отображается время вида: Код (PHP): 'last_seen' => array ( 'time' => 1458760923, ) Вопрос: как перевести unix время в дату и задать в строке: Код (PHP): if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 ) { условие, чтобы отображать если дата равна или старше 28 марта 2016 года?
date() ну либо сделать врЕменную переменную с таймстампом искомой даты и сравнивать с этим таймстампом то что итерируется в цикле, либо в цикле создавать врЕменную переменную с датой в формате Y-m-d и сравнивать с 2016-03-28. кажется первый вариант чуть более адекватный.
Код (PHP): echo ($item[$i]['uid']."|".$item[$i]['last_seen']['time']."<br>"); Код (Text): $item[$i]['last_seen']['time'] - это unix time. Как прописать date(), чтобы вместо unixtime: Код (Text): $item[$i]['last_seen']['time'] отобразилась дата?
все верно. ты выводишь значение из многомерного массива сконкатенированное со строкой "пробел пайп пробел дейт скобки пробел тег конца строки". это что за пайпинг? линуксов насмотрелся?
Код (PHP): echo ($item[$i]['uid']."|".date ($item[$i]['last_seen']['time'])."<br>");] отображается unix time. Кто-то может подсказать как именно и где прописать date()?
спасибо, разобрался: Код (PHP): $time = ($item[$i]['last_seen']['time']); echo ($item[$i]['uid']."|". date('Y-m-d', $time)."<br>"); Добавлено спустя 16 минут 24 секунды: Дату из unixtime в обычную перевёл. Как задать в условии, чтобы отображалось если дата равна или старше 28-03-16: Код (PHP): if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 and date('d-m-Y', $time) >= 28-03-2016) { $time = ($item[$i]['last_seen']['time']); echo ($item[$i]['uid']."|". date('d-m-Y', $time)."<br>");
привёл Код (PHP): if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 and date('Y-m-d', $time) >= 2016-03-28) { $time = ($item[$i]['last_seen']['time']); echo ($item[$i]['uid']."|". date('Y-m-d', $time)."<br>");
Код (PHP): php -r 'echo 2016-03-28;' 1985 Добавлено спустя 1 минуту 7 секунд: кстати я в своем посте упомянул что считаю этот вариант менее адекватным чем другой. почему ты в итоге решил идти менее адекватным путем? у тебя есть какое-то обоснование?
в строку, не в дату. вот юникс таймстамп это дата. и объект класса DateTime это дата, а то, во что ты перевёл это, *ля, строка. ну ок, это "строковое представление даты для русской локали". годится только для вывода на страницу, но не для сравнений и вычислений. Код (PHP): echo '12.10.1992' + 1; // = 13.1 внезапно! нубы сильно греются, когда обнаруживают такое. с типами надо работать правильно! https://php.ru/forum/viewtopic.php?f=20&t=50838
Так сравнивай две unix-даты, поскольку они обычные числа. Не надо сравнивать строки. Что такое unix-дата? Число секунд, прошедшее с 1 января 1970 года. Вот два числа секунд запросто сравниваются, а две строки - сравниваются, но совсем по другим условиям Код (PHP): if ($time > strtotime("2016-03-28 00:00"))
если типа "сутки", то проще отнять от time(): Код (PHP): if ($var > time() - 86400) { этому коту меньше суток, он ещё совсем малыш }
секрет успеха в том, чтобы в части проверки использовать дату как есть, т.е. unixtime. а в части "отображать" уже использовать функцию date(), понял? Добавлено спустя 1 минуту 42 секунды: это и есть всеми любимая MVC: представление отдельно от добывания данных и управления.
а еще секрет успеха в том что многие языки программирования умеют давать больше-меньше при сравнении строк. просто все символы в акси переводятся и дальше посимвольно сравниваются полученные значения. 2016-02-16 будет больше чем 2016-01-31 потому что на 7й позиции будут разные числа стоять - в пользу первого.