Как в PHP преобразовать дату к временной метке timestamp?

как в php преобразовать дату к временной метке timestamp?

Преобразование даты в timestamp

Зачастую возникает потребность узнать, какой временной точке UNIX соответствует дата, заданная в определенном формате. Самым простым способом является использование функции strtotime(). В первом обязательном параметре она ожидает получить строку с датой вида «2018-02-20 12:00». Результатом выполнения функции будет целочисленное значение временной метки timestamp. В случае неудачи возвратиться логическое значение false.

Также в PHP есть объектно-ориентированный способ преобразования даты в timestamp. Для этого нужно использовать класс DateTime. Если взаимодействовать с ним через конструктор, в первом параметре должна быть передана дата в формате «2018-02-20 12:00». Вы также можете использовать статический метод класса DateTime::createFromFormat() которому в качестве первого параметра нужно передать строку форматирования даты, а во второй — саму дату. Метод createFromFormat() осуществит разбор исходя из заданной схемы. Таким образом, вы получаете возможность преобразования дат различных форматов. createFromFormat() возвращает экземпляр класса, у которого есть метод getTimestamp(). Результатом его вызова станет целочисленное значение временной метки.

//Простое преобразование
echo strtotime('2000-02-20 12:00');  //951040800
echo strtotime('2000-02-20');        //950997600


//Использование класса
$date = new DateTime('2000-02-20');
echo $date->getTimestamp();          //950997600

$date = DateTime::createFromFormat('d.m.Y', '20.02.2000');
$date->setTime(0, 0, 0);
echo $date->getTimestamp();          //950997600

В некоторых ситуациях вы будете оперировать компонентами даты: секунды, минуты, часы и т.д. PHP позволяет определить временную метку с помощью таких составляющих. Для этого используются функции mktime() и gmmktime(). Обе эти функции принимают шесть целочисленных параметров располагающихся по порядку: час, минута, секунда, месяц, день, год. Если опустить некоторые из параметров, они будут взяты из текущей даты. Обе функции возвращают временную метку timestamp, а в случае неудачи false.

Единственным отличием mktime() от gmmktime() является то, что первая зависит от таймзоны конфигурации, а вторая всегда возвращает время UTC, т.е. первого часового пояса.

//задаем все компоненты даты
echo mktime(12, 0, 0, 2, 20, 2000);   //951040800
echo gmmktime(12, 0, 0, 2, 20, 2000); //951048000


//остальные компоненты из текущей даты
echo gmmktime(12, 0, 0);              //1519214400

Важно
Все преобразования дат в метку времени timestamp происходят исходя из часового пояса, заданного в конфигурации PHP. Итоговое числовое значение будет отличаться для разных таймзон. Например, дата «20/02/2018» наступит на два часа раньше в Париже, чем в Москве.

Таймзону можно изменять во время выполнения программы с помощью функции date_default_timezone().

Преобразование timestmp в дату

Обратную операцию преобразования временной метки timestamp к удобочитаемому формату можно произвести с помощью функции date(). Ей в первом параметре передается строка форматирования даты, а во втором временная метка.

Аналогично примерам, приводимым выше, PHP имеет и объектно-ориентированное решение задачи с помощью класса DateTime. Для выполнения операции необходимо создать экземпляр класса DateTime, после чего установить в него временную метку вызовом метода setTimestamp(). Преобразование в дату происходит с помощью метода format() в который, как несложно догадаться, необходимо передать строку форматирования даты.

//используем функцию
echo date('d.m.Y G:s', time());  //21.02.2018 21:03


//специальный класс
$date = new DateTime();
$date->setTimestamp(time());
echo $date->format('d.m.Y G:s'); //21.02.2018 21:03

Последние публикации