За последние 24 часа нас посетили 16919 программистов и 1646 роботов. Сейчас ищет 981 программист ...

unix time

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

  1. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Код (PHP):
    1. <?php
    2. $people = file_get_contents ('json.php');
    3.  
    4. $list = json_decode ($people, true);
    5.  
    6. foreach ($list as &$item) {
    7.   for($i=1; $i<1000; $i++) { 
    8.     if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 ) {
    9.       echo ($item[$i]['uid']."<br>"); 
    10.     }
    11.   }
    12. }
    13. ?>
    В массиве $list отображается время вида:
    Код (PHP):
    1. 'last_seen' => array ( 'time' => 1458760923, ) 
    Вопрос: как перевести unix время в дату и задать в строке:
    Код (PHP):
    1.     if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1 ) { 
    условие, чтобы отображать если дата равна или старше 28 марта 2016 года?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    date()
    ну либо сделать врЕменную переменную с таймстампом искомой даты и сравнивать с этим таймстампом то что итерируется в цикле, либо в цикле создавать врЕменную переменную с датой в формате Y-m-d и сравнивать с 2016-03-28. кажется первый вариант чуть более адекватный.
     
  3. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Как именно прописать date(), чтобы конвертировать unixtime в дату?
     
  4. igordata

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

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

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    guestphp в документацию смотрел?
     
  6. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Код (PHP):
    1. echo ($item[$i]['uid']."|".$item[$i]['last_seen']['time']."<br>");
    Код (Text):
    1. $item[$i]['last_seen']['time']
    - это unix time. Как прописать date(), чтобы вместо unixtime:
    Код (Text):
    1. $item[$i]['last_seen']['time']
    отобразилась дата?
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    все верно. ты выводишь значение из многомерного массива сконкатенированное со строкой "пробел пайп пробел дейт скобки пробел тег конца строки". это что за пайпинг? линуксов насмотрелся?
     
  8. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Код (PHP):
    1. echo ($item[$i]['uid']."|".date ($item[$i]['last_seen']['time'])."<br>");] 
    отображается unix time.
    Кто-то может подсказать как именно и где прописать date()?
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    самый лучший вариант - посмотреть документацию по date. Там все есть ((:)
     
  10. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    спасибо, разобрался:
    Код (PHP):
    1. $time = ($item[$i]['last_seen']['time']);
    2.  
    3. echo ($item[$i]['uid']."|".  date('Y-m-d', $time)."<br>");
    Добавлено спустя 16 минут 24 секунды:
    Дату из unixtime в обычную перевёл.

    Как задать в условии, чтобы отображалось если дата равна или старше 28-03-16:
    Код (PHP):
    1. if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1  and date('d-m-Y', $time) >= 28-03-2016) {
    2.  
    3. $time = ($item[$i]['last_seen']['time']);
    4.  
    5. echo ($item[$i]['uid']."|".  date('d-m-Y', $time)."<br>");
    6.  
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    привести условную дату к нормальному виду - Y-m-d
     
  12. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    привёл
    Код (PHP):
    1. if ( $item[$i]['can_post'] == 1 or $item[$i]['can_see_all_posts'] == 1  and date('Y-m-d', $time) >= 2016-03-28) {
    2.  
    3. $time = ($item[$i]['last_seen']['time']);
    4.  
    5. echo ($item[$i]['uid']."|".  date('Y-m-d', $time)."<br>");
    6.  
     
  13. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (PHP):
    1. php -'echo 2016-03-28;'
    2. 1985
    Добавлено спустя 1 минуту 7 секунд:
    кстати я в своем посте упомянул что считаю этот вариант менее адекватным чем другой. почему ты в итоге решил идти менее адекватным путем? у тебя есть какое-то обоснование?
     
  14. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Как задать в условии, чтобы отображалось если дата равна или старше 28-03-16?
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    так и задать. только это же строка. понимаешь о чем я?
     
  16. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    в строку, не в дату. вот юникс таймстамп это дата. и объект класса DateTime это дата, а то, во что ты перевёл это, *ля, строка. ну ок, это "строковое представление даты для русской локали". годится только для вывода на страницу, но не для сравнений и вычислений.

    Код (PHP):
    1. echo '12.10.1992' + 1; // = 13.1 внезапно!    
    нубы сильно греются, когда обнаруживают такое.

    с типами надо работать правильно! https://php.ru/forum/viewtopic.php?f=20&t=50838
     
  17. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Так сравнивай две unix-даты, поскольку они обычные числа. Не надо сравнивать строки. Что такое unix-дата? Число секунд, прошедшее с 1 января 1970 года. Вот два числа секунд запросто сравниваются, а две строки - сравниваются, но совсем по другим условиям
    Код (PHP):
    1. if ($time > strtotime("2016-03-28 00:00"))
    2.  
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если типа "сутки", то проще отнять от time():
    Код (PHP):
    1. if ($var > time() - 86400) {
    2.   этому коту меньше суток, он ещё совсем малыш
    3. } 
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (PHP):
    1. if ($var <= mktime(23, 59, 59, 3, 28, 16)) 
     
  20. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    секрет успеха в том, чтобы в части проверки использовать дату как есть, т.е. unixtime. а в части "отображать" уже использовать функцию date(),
    понял?

    Добавлено спустя 1 минуту 42 секунды:
    это и есть всеми любимая MVC: представление отдельно от добывания данных и управления.
     
  21. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а еще секрет успеха в том что многие языки программирования умеют давать больше-меньше при сравнении строк. просто все символы в акси переводятся и дальше посимвольно сравниваются полученные значения. 2016-02-16 будет больше чем 2016-01-31 потому что на 7й позиции будут разные числа стоять - в пользу первого.
     
  22. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    не актуально