mktime

(PHP 4, PHP 5, PHP 7)

mktimeВозвращает метку времени Unix для заданной даты

Описание

mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ) : int

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

Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты/времени.

Примечания

Замечание:

Начиная с версии PHP 5.1, если mktime() вызывается без аргументов, то будет сгенерировано замечание уровня E_STRICT. Используйте вместо этого функцию time().

Список параметров

hour

Количество часов, прошедших с начала дня, указанного параметрами month, day и year. Отрицательные значения определяют часы до полуночи указанного дня. Значения больше 23 определяют соответствующий час следующего дня (или дней).

minute

Количество минут, прошедших от начала часа, указанного параметром hour. Отрицательные значения определяют минуты предыдущего часа. Значения больше 59 определяют соответствующие минуты следующего часа (или часов).

second

Количество секунд, прошедших от начала минуты, указанной параметром minute. Отрицательные значения определяют секунды из предыдущей минуты. Значения больше 59 определяют соответствующие секунды следующей минуты (или минут).

month

Количество месяцев, прошедших с конца предыдущего года. Значения от 1 до 12 определяют нормальные обычные календарные месяцы года. Значения меньше 1 (включая отрицательные значения) определяют месяца предыдущего года в обратном порядке, то есть 0 будет декабрем, -1 - ноябрем и т.д. Значения больше 12 определяют соответствующий месяц в следующем году (или годах).

day

Количество дней, прошедших с конца предыдущего месяца. Значения от 1 до 28, 29, 30 или 31 (в зависимости от месяца) определяют нормальные дни соответствующего месяца. Значения меньше 1 (включая отрицательные значения) определяют дни предыдущего месяца, таким образом, 0 является последним днем предыдущего месяца, -1 - предпоследним днем предыдущего месяца и т.д. Значения больше количества дней соответствующего месяца определяют соответствующий день следующего месяца (или месяцев).

year

Номер года, может быть указан двумя или четырьмя цифрами, причем значения между 0-69 будут трактованы как 2000-2069, а между 70-100 - как 1970-2000. На тех системах, где time_t является 32-битным знаковым целым (наиболее распространенный вариант на сегодня), корректный диапазон для параметра year содержит даты где-то между 1901 и 2038. Однако, до версии PHP 5.1.0, на некоторых системах этот диапазон был ограничен датами между 1970 и 2038 (например, Windows).

is_dst

Данный параметр может быть установлен в 1, если заданной дате соответствует летнее время (DST), 0 - в противном случае, или -1 (значение по умолчанию), если неизвестно, действует ли летнее время на заданную дату. В последнем случае PHP пытается определить это самостоятельно. Это может привести к неожиданному результату (который, тем не менее, не будет неверным). Некоторые даты могут быть неверными, если летнее время применимо к системе, на которой запущен PHP, или параметр is_dst установлен в 1. Если переход на летнее время происходит, например, в 2:00, все даты между 2:00 и 3:00 станут некорректными и mktime() вернет неопределенное (обычно отрицательное) значение. Некоторые системы (например, Solaris 8) осуществляют переход на летнее время в полночь, так что время 0:30 дня, когда был осуществлен переход на летнее время будет обрабатываться как 23:30 предыдущего дня.

Замечание:

Начиная с версии PHP 5.1.0, этот параметр более не рекомендуется к использованию. Вместо этого рекомендуется устанавливать соответствующую временную зону.

Замечание:

Этот параметр был удален в PHP 7.0.0.

Возвращаемые значения

mktime() возвращает временную метку Unix в соответствии с переданными аргументами. Если были переданы некорректными аргументы, функция вернет FALSE (до PHP 5.1 возвращалась -1).

Ошибки

Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE, и/или ошибку уровня E_STRICT или E_WARNING при использовании системных настроек или переменной окружения TZ. Смотрите также date_default_timezone_set()

Список изменений

Версия Описание
7.0.0 Параметр is_dst был удален.
5.3.0 mktime() теперь выбрасывает ошибку уровня E_DEPRECATED при использовании параметра is_dst.
5.1.0 Параметр is_dst теперь считается устаревшим. Функция теперь возвращает FALSE при ошибке, тогда как раньше возвращалась -1. Теперь функция принимает дату с одновременно установленными в ноль годом, месяцем и днем.
5.1.0 Если mktime() была вызвана без аргументов, то будет сгенерировано замечание уровня E_STRICT. Используйте вместо этого функцию time().
5.1.0

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE.

Примеры

Пример #1 Пример использования функции mktime()

<?php
// Устанавливаем используемую по умолчанию временную зону. Доступно с PHP 5.1
date_default_timezone_set('UTC');

// Выводит: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

// Выводит что-то вроде: 2006-04-05T01:02:03+00:00
echo date('c'mktime(123452006));
?>

Пример #2 Пример использования mktime()

Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет "Jan-01-1998".

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Пример #3 Последний день месяца

Последний день любого месяца можно вычислить как "нулевой" день следующего месяца, не -1 день. Оба приведенных ниже примера выведут "Последний день февраля 2000 г.: 29".

<?php
$lastday 
mktime(000302000);
echo 
strftime("Последний день февраля 2000 г.: %d"$lastday);
$lastday mktime(0004, -312000);
echo 
strftime("Последний день февраля 2000 г.: %d"$lastday);
?>

Примечания

Предостережение

До версии PHP 5.1.0, отрицательные временные метки не поддерживались ни под одной известной версией Windows, а также и некоторыми другими системами. Таким образом, диапазон корректных лет был ограничен датами от 1970 до 2038 г.

Смотрите также

  • checkdate() - Проверяет корректность даты по григорианскому календарю
  • gmmktime() - Возвращает локальную метку времени Unix для времени по Гринвичу
  • date() - Форматирует вывод системной даты/времени
  • time() - Возвращает текущую метку системного времени Unix