Функция возвращает метку времени Unix, соответствующую дате и
времени, заданным аргументами.
Метка времени - это целое число, равное разнице в секундах между
заданной датой/временем и началом Эпохи Unix (The Unix Epoch,
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 этот параметр более не рекомендуется к
использованию. Вместо этого рекомендуется устанавливать соответствующую
временную зону.
Возвращаемые значения
mktime() возвращает временную метку Unix в
соответствии с переданными аргументами.
Если были переданы некорректными аргументы, функция вернет FALSE (до версии PHP 5.1
возвращалась -1).
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE,
и/или ошибку уровня E_STRICT или E_WARNING при использовании системных
настроек или переменной окружения TZ. Смотрите также date_default_timezone_set()
Список изменений
Версия
Описание
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(0, 0, 0, 7, 1, 2000));
Функцию mktime() удобно использовать для
выполнения арифметических операций с датами, так как она
вычисляет верные значения при некорректных аргументах. Например,
в следующем примере каждая строка выведет "Jan-01-1998".
Последний день любого месяца можно вычислить как "нулевой" день
следующего месяца, не -1 день. Оба приведенных ниже примера
выведут "Последний день февраля 2000 г.: 29".
<?php $lastday = mktime(0, 0, 0, 3, 0, 2000); echo strftime("Последний день февраля 2000 г.: %d", $lastday); $lastday = mktime(0, 0, 0, 4, -31, 2000); echo strftime("Последний день февраля 2000 г.: %d", $lastday); ?>
Примечания
Предостережение
До версии PHP 5.1.0, отрицательные временные метки не поддерживались
ни под одной известной версией Windows, а также и некоторыми другими
системами. Таким образом, диапазон корректных лет был ограничен
датами от 1970 до 2038 г.
Смотрите также
checkdate() - Проверяет корректность даты по григорианскому календарю
gmmktime() - Возвращает метку времени Unix для времени по Гринвичу