Функции даты и времени в PHP

Функции даты и времени



Наиболее полезные функции даты и времени в PHP


функции даты и времени в PHP: php.net


date - форматирует вывод системной даты и времени
time - возвращает текущую метку системного времени Unix
date_default_timezone_get - возвращает временную зону, используемой по умолчанию всеми функциями даты и времени в скрипте
date_default_timezone_set - устанавливает временную зону по умолчанию для всех функций даты и времени в скрипте
getdate - возвращает информацию о дате и времени
strtotime - преобразует текстовое представление даты на английском языке в метку времени Unix
mktime - возвращает метку времени Unix для заданной даты
microtimee - возвращает текущую метку времени Unix с микросекундами


Класс DateTime - позволяет работать с датой и временем как с объектом


date_create - псевдоним DateTime::__construct()
date_format - псевдоним DateTime::format()
date_add - псевдоним DateTime::add()
date_interval_create_from_date_string - псевдоним DateInterval::createFromDateString()




date




Функция date - выводит текущую дату и время в нужном нам формате.
Возвращает строку, отформатированную в соответствии с указанным шаблоном format.
Необязательным параметром - используется метка времени, заданная аргументом timestamp, или текущее системное время, если timestamp не задан. То есть, если мы не задаем второй параметр, используется вызов функции time().

Параметры форматирования в руководстве: php.net


date ( $format , $timestamp = time ());




time




Функция time- возвращает количество секунд, прошедших с начала эпохи Unix (1 января 1970 00:00:00 GMT) до текущего времени.


Пример:

<?php

echo date('Y-M-d H:i:s');
// выведет текущее время
echo '<br>';

echo date('Y-m-d H:i:s', time());
// - тоже выведет текущее время
echo '<br>';

echo date('Y-m-d H:i:s', 0 );
// выведет: 1970-01-01 03:00:00 (3 часа - это разница часового пояса)
echo '<br>';

echo date('Y-m-d H:i:s', 1 );
// выведет: 1970-01-01 03:00:01 (прибавит к дате начала эпохи Unix одну секунду )
echo '<br>';

echo date('Y-m-d H:i:s', time() + 60 );
// прибавляет к текушей дате одну минуту
echo '<br>';

echo date('Y-m-d H:i:s', time() + 60 *60 );
// прибавляет к текушей дате один час
// таким образом можно получить любую дату, как будующую, так и прошедшую
echo '<br>';

echo '2010 - ' . date('Y');
// выведет: 2010-2019

?>




date_default_timezone_get




date_default_timezone_get - эта функция пытается получить временную зону по умолчанию,
то есть узнать, какой часовой пояс используется, по порядку следующими способами:
- чтение настройки временной зоны с помощью функции date_default_timezone_set() (если применимо);
- чтение значения ini-настройки date.timezone (если задана);
- если ни один из способов не принес результата, date_default_timezone_get() вернет временную зону UTC.
Получение временной зоны по умолчанию:


<?php
echo date_default_timezone_get();
// выведет: Europe/Moscow
?>




date_default_timezone_set




date_default_timezone_set - от работы этой функции зависят все прочие функции даты и времени, перед использованием функциий, например, все той же date, необходимо установить нужный нам часовой пояс с помощью функции date_default_timezone_set. C помощью этой функции можно настроить нужный нам часовой пояс, передав параметром временную зону. Список поддерживаемых временных зон: php.net



getdate




getdate - эта функция позволяет получить дату в виде массива, при этом каждая из составляющих частей даты будет разбита на элементы ассоциативного массива. Индексы возвращаемого ассоциативного массива можно посмотреть здесь: php.net


<?php
$date = getdate ();

// так как получаем массив, распечатываем с помощью print_r(),
print_r ($date );
// либо var_dump()
var_dump ($date);

// вывод элементов массива по отдельности
echo $date [ 'year'];
// выведет: 2019
?>

- распечатка массива с помощью var_dump():
array (size=11)
'seconds' => int 59
'minutes' => int 50
'hours' => int 19
'mday' => int 12
'wday' => int 3
'mon' => int 6
'year' => int 2019
'yday' => int 162
'weekday' => string 'Wednesday' (length=9)
'month' => string 'June' (length=4)
0 => int 1560358259
2019




strtotime




strtotime - с помощью этой функции мы можем задавать время не в каких-то цифрах, но и в цифрах с применением текста на английском языке.
Описание:


strtotime ( $time, $now = time())


Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC) относительно метки времени, переданной в now, или текущего времени, если аргумент now опущен.


Пример:

<?php
echo strtotime ("+1 day"); // выведет некое количество секунд
echo '<br>';

// с помощью функции date, указав ей необходимые параметры,
// преобразовываем это количество секунд к понятной нам дате
echo date ('Y-m-d H:i:s', strtotime ("+1 day")); // дата плюс один день
// выведит: дату завтрашнего дня
echo '<br>';

echo date ('Y-m-d H:i:s', strtotime ("+1 day 2 hours"));
// выведит: дату завтрашнего дня плюс два часа
?>




mktime




mktime - работа этой функции похожа на работу функции time(), а так же позволяет прибавлять в более понятной нам форме нужное количесто лет, нужное количество дней и т. д.
Список параметров смотреть здесь: php.net
Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты и времени.


Пример:
Выведем текущую временную метку с помощью функции time() и с помощью функции mktime().


<?php
echo time();
echo '<br>';

echo mktime (date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"));
echo '<br>';

echo mktime (date("H"), date("i"), date("s") + 1, date("m"), date("d"), date("Y"));
// результат в третьем случае будет на одну секунду больше
?>

Выведет:
1560360383
1560360383
1560360384 - результат в третьем случае будет на одну секунду больше



- в двух случаях получаем один и то же результат
- но в случае с mktime() мы можем прибавлять числа к той или иной части даты, напимер, прибавим одну секунду: date("s")+1 . Результат в третьем случае будет на одну секунду больше.


Пример использования mktime():
В переменную $st поместим текущую дату и прибавим к ней один год: date("Y")+1 . Выведем эту дату с помощью функции date() в нужном нам формате: 'Y-m-d H:i:s' и вторым параметром передаем временную метку, которую мы получили выше: $st .


<?php
$st = mktime (date ("H"), date("i"), date("s"), date("m"), date("d"), date("Y")+ 1 );
echo date ('Y-m-d H:i:s', $st );
// в результате получаем дату следующего года
?>

Выведет:
2020-06-12 20:38:06




microtime




microtime - эта функция возвращает текущую метку времени Unix с микросекундами. Эта функция доступна только на операционных системах, в которых есть системный вызов gettimeofday().
Данная функция позволяет замерять время выполнения скрипта.
Перед началом выполнения скрипта запускается функция microtime(), результат ее работы возвращается в какую - нибудь переменную, например - $start, и после последней выполненной строчки кода, запускается еще раз эта функция microtime(), результат ее возвращается в переменную $end. Далее получаем разницу ($end - $start) - это и будет время выполнения скрипта в секундах.


<?php
// возвращает текущую метку системного времени Unix
echo time();
echo '<br>';

// возвращает текущую метку времени Unix с микросекундами
echo microtime ();
var_dump ( microtime ()); // по умолчанию получаем - string
var_dump ( microtime ( true )); // получим - float
echo '<br>';

// время выполнения скрипта
$start = microtime (true );
// функция usleep - откладывает выполнение скрипта на микросекунды
usleep ( 100 );

$end = microtime ( true );
echo $end - $start;
echo '<br>';

// время перебора счетчика
$start = microtime ( true );
for ( $i = 1 ; $i <= 100000 ; $i++){
if ( $i == 100000 ) echo '<p>Отчет завершен </p>';
}
$end = microtime ( true );
echo $end - $start ;
?>

Выведет:
1560361954

0.17640000 1560361954
string '0.17640000 1560361954' (length=21)
float 1560361954.1764

0.0090000629425049

Отчет завершен
0.017999887466431





Класс DateTime




Класс DateTime - позволяет работать с датой и временем как с объектом.
Класс - это набор свойств и методов. Свойства - это ни что иное как переменные в классе, а методы - это ни что иное как функции в классе.



date_create




date_create - эта функция является псевдонимом конструктора класса: DateTime::__construct() и создает объект даты-времени, с которым мы можем дальше работать, то есть для которого мы можем вызывать в дальнейшем какие-то методы или функции.
Для данной функции необходимо передать просто параметр даты, например: год, месяц, число. И внутри нее мы можем вызвать знакомую функцию date() и передать нужную нам дату.


<?php
// создадим переменную $date и для нее вызовим функцию date_create() и,
// в качестве параметра, передадим дату: '2016-05-24'
$date = date_create ( '2016-05-24');
// - echo $date; - вызовет ошибку: объект класса DateTime невозможно
// конвертировать в строку, потому что, $date - объект.

print_r ( $date );
var_dump ( $date );
?>

Функция print_r($date) выведет:
DateTime Object ( [date] => 2016-05-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Moscow )

Функция var_dump($date) выведет:
object(DateTime)[1]
public 'date' => string '2016-05-24 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Moscow' (length=13)




date_format




date_format - эта функция является псевдонимом: DateTime::format().
Она преобразует дату к нужному нам формату, то есть показать в удобочитаемой форме нам данный объект.


<?php
$date = date_create (date ( 'Y-m-d H:i:s'));
echo date_format ( $date , 'Y-m-d H:i:s');
?>

Выведет:
2019-06-12 21:19:00




date_add




date_add - эта функция является псевдонимом: DateTime::add().

Она позволяет прибавлять что-то к дате (часы, минуты, секунды и т. д.).



date_interval_create_from_date_string




date_interval_create_from_date_string - эта функция является псевдонимом: DateInterval::createFromDateString().

Она позволяет прибавлять удобочитаемые интервалы к дате.



<?php
echo date_format ( $date , 'Y-m-d H:i:s');
// - где $date - объект обработанный функцией date_create()

// первый параметр - объект $date,
// второй параметр - date_interval_create_from_date_string()
date_add ( $date , date_interval_create_from_date_string ('2 days + 2hours + 10 minutes + 5 seconds'));
echo '<br>';

echo date_format ( $date , 'Y-m-d H:i:s');
// где $date - объект обработанный функцией date_add()
?>

- выведет:
2019-06-12 21:26:20
2019-06-14 23:36:25






Наверх Наверх