(PHP 4, PHP 5, PHP 7)
mktime — Возвращает метку времени Unix для заданной даты
$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
]]]]]]] )Функция возвращает метку времени 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 этот параметр более не рекомендуется к использованию. Вместо этого рекомендуется устанавливать соответствующую временную зону.
Замечание:
Этот параметр был удален в 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 |
Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня |
Пример #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));
// Выводит что-то вроде: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>
Пример #2 mktime() example
Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет "Jan-01-1998".
<?php
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>
Пример #3 Последний день месяца
Последний день любого месяца можно вычислить как "нулевой" день следующего месяца, не -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 г.