всегда было интересно кто занимается форматированием 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" которые тоже число но отображает как дату то ошибки нету
вообще бред PHP: (int)$timestamp===$timestamp вот так проверьте.., во-первых переменные с $, во-вторых строгое сравнение по типу ==== а DateTime - почитайте справочник - что же она ожидает в качестве параметра --- Добавлено --- var_dump($timestamp) - строка и есть, раз так выдает
PHP: (int)$timestamp===$timestamp будет false потому что тип строка var_dump($timestamp) - строка и есть, раз так выдает строка но отображается как дата а не секунды
зачем вы юникстайм пихаете сюда: https://php.ru/manual/datetime.construct.html --- Добавлено --- @vikrorpert === проверяет и тип данных, у вас практика с тестами была на эту тему ?
Если функция UNIX_TIMESTAMP()вызывается с аргументомdate, она возвращает величину аргумента как количество секунд с 1970-01-01 00:00:00 GMT TIMESTAMP — тип данных для хранения даты и времени. Данные хранятся в виде количества секунд, прошедших с начала «эпохи Юникса». Диапазон значений: 1970-01-01 00:00:00 — 2038-12-31 00:00:00. Занимает 4 байта
главное в коде - короткое не надо мух с котлетами путать... то что вы пишите относится к MySQL никак не к пыхе! в php нет такого типа!
какого типа? в мускуле есть тип TIMESTAMP где хранятся секунды, но отображает как дату в пхп приходит дата, значит мускуль преобразует и отдает пхп уже форматированную дату?
да, и форматированием ее вывода можно управлять функцией DATE_FORMAT. А полученную дату можно скормить пыхе и сконвертить обратно в timestamp. При желании можно форматировать вывод timestamp из БД так, чтобы отдавались только секунды "как есть". Но на практике это крайне редко востребованный кейс. В 95% случаев, если нужно сравнивать дату из БД с текущей, это можно сделать еще на стадии запроса. Мускуль тоже отлично умеет в CURRENT_DATE() и даже в CURRENT_DATETIME().
Топикстартер, запомни: всё, что скрипт получает из GET или POST или непосредственно из базы — всё это просто строки. То, что было в MySQL типом TIMESTAMP или DATETIME в пыхе стало строкой. Это не дата-время! Чтобы эти данные вдруг стали применимы как unix timestamp или как объект DateTime надо приложить усилия. Как минимум, если ты работаешь с умными фреймворками, указать в классе, что данные поля следует обрабатывать особым образом. См. 1 раздел timestamps и 2 всё подряд. Если ты без фреймворка, то это делай эти преобразования сам явно.