За последние 24 часа нас посетили 19146 программистов и 1867 роботов. Сейчас ищут 1073 программиста ...

магия timestamp

Тема в разделе "PHP для новичков", создана пользователем vikrorpert, 1 ноя 2017.

  1. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    всегда было интересно кто занимается форматированием timestamp? в базе хранится как количество секунд, но никогда не отображается в секундах, мускуль всегда показывает в виде даты и времени
    и пхп тоже показывает как дата и время
    вот например код
    var_dump($timestamp); вернет строку с датой и временем
    а тут (int)timestamp==timestamp вернет true потому что timestamp это число, но почему то отображается как дата

    а проблема изза кода
    new \DateTime($timestamp, new \DateTimeZone('UTC'));
    если передать число то вылетает ошибка
    DateTime::__construct(): Failed to parse time string (1503695183) at position 8 (8): Unexpected character

    а если передать "timestamp" которые тоже число но отображает как дату то ошибки нету
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.862
    Симпатии:
    752
    Адрес:
    Татарстан
    вообще бред
    PHP:
    1. (int)$timestamp===$timestamp
    вот так проверьте.., во-первых переменные с $, во-вторых строгое сравнение по типу ====
    а DateTime - почитайте справочник - что же она ожидает в качестве параметра
    --- Добавлено ---
    var_dump($timestamp) - строка и есть, раз так выдает
     
  3. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    PHP:
    1. (int)$timestamp===$timestamp
    будет false потому что тип строка

    var_dump($timestamp) - строка и есть, раз так выдает
    строка но отображается как дата а не секунды
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
  5. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    а разве timestamp это не юникстайм?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    нет
    --- Добавлено ---
    Длинное Жд полотно у тебя получилось
     
  7. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    Если функция UNIX_TIMESTAMP()вызывается с аргументомdate, она возвращает величину аргумента как количество секунд с 1970-01-01 00:00:00 GMT

    TIMESTAMP — тип данных для хранения даты и времени. Данные хранятся в виде количества секунд, прошедших с начала «эпохи Юникса». Диапазон значений: 1970-01-01 00:00:00 — 2038-12-31 00:00:00. Занимает 4 байта
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.862
    Симпатии:
    752
    Адрес:
    Татарстан
    главное в коде - короткое

    не надо мух с котлетами путать... то что вы пишите относится к MySQL никак не к пыхе!
    в php нет такого типа!
     
  9. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    какого типа?
    в мускуле есть тип TIMESTAMP где хранятся секунды, но отображает как дату
    в пхп приходит дата, значит мускуль преобразует и отдает пхп уже форматированную дату?
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    да, и форматированием ее вывода можно управлять функцией DATE_FORMAT. А полученную дату можно скормить пыхе и сконвертить обратно в timestamp. При желании можно форматировать вывод timestamp из БД так, чтобы отдавались только секунды "как есть".

    Но на практике это крайне редко востребованный кейс. В 95% случаев, если нужно сравнивать дату из БД с текущей, это можно сделать еще на стадии запроса. Мускуль тоже отлично умеет в CURRENT_DATE() и даже в CURRENT_DATETIME().
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    Топикстартер, запомни: всё, что скрипт получает из GET или POST или непосредственно из базы — всё это просто строки. То, что было в MySQL типом TIMESTAMP или DATETIME в пыхе стало строкой. Это не дата-время!
    Чтобы эти данные вдруг стали применимы как unix timestamp или как объект DateTime надо приложить усилия. Как минимум, если ты работаешь с умными фреймворками, указать в классе, что данные поля следует обрабатывать особым образом. См. 1 раздел timestamps и 2 всё подряд.
    Если ты без фреймворка, то это делай эти преобразования сам явно.
     
    Fell-x27 нравится это.