mktime
Функция возвращает метку времени Unix, соответствующую дате и времени, переданных в качестве аргументов. Метка времени — это целое число, равное разнице в секундах между заданной датой/временем и началом эпохи Unix (1 января 1970 00:00:00 GMT).
Любые необязательные аргументы, опущенные или равные null , будут установлены в текущее значение в соответствии с локальной датой и временем.
Обратите внимание, что порядок аргументов нечётный: month , day , year , а не в более разумной последовательности year , month , day .
Вызов функции mktime() без аргументов не поддерживается и приведёт к ошибке ArgumentCountError .
Список параметров
Количество часов, прошедших с начала дня, указанного параметрами month , day и year . Отрицательные значения определяют часы до полуночи указанного дня. Значения больше 23 определяют соответствующий час следующего дня (или дней).
Количество минут, прошедших от начала часа, указанного параметром hour . Отрицательные значения определяют минуты предыдущего часа. Значения больше 59 определяют соответствующие минуты следующего часа (или часов).
Количество секунд, прошедших от начала минуты, указанной параметром minute . Отрицательные значения определяют секунды из предыдущей минуты. Значения больше 59 определяют соответствующие секунды следующей минуты (или минут).
Количество месяцев, прошедших с конца предыдущего года. Значения от 1 до 12 определяют нормальные обычные календарные месяцы года. Значения меньше 1 (включая отрицательные значения) определяют месяца предыдущего года в обратном порядке, то есть 0 будет декабрём, -1 — ноябрём и т.д. Значения больше 12 определяют соответствующий месяц в следующем году (или годах).
Количество дней, прошедших с конца предыдущего месяца. Значения от 1 до 28, 29, 30 или 31 (в зависимости от месяца) определяют нормальные дни соответствующего месяца. Значения меньше 1 (включая отрицательные значения) определяют дни предыдущего месяца, таким образом, 0 является последним днём предыдущего месяца, -1 — предпоследним днём предыдущего месяца и т.д. Значения больше количества дней соответствующего месяца определяют соответствующий день следующего месяца (или месяцев).
Номер года, может быть указан двумя или четырьмя цифрами, причём значения между 0-69 будут трактованы как 2000-2069, а между 70-100 — как 1970-2000. На тех системах, где time_t является 32-битным знаковым целым (наиболее распространённый вариант на сегодня), корректный диапазон для параметра year содержит даты где-то между 1901 и 2038.
Возвращаемые значения
mktime() возвращает временную метку Unix в соответствии с переданными аргументами.
Список изменений
Версия | Описание |
---|---|
8.0.0 | hour больше не является необязательным. Если вам нужна временная метка Unix, используйте функцию time() . |
8.0.0 | minute , second , month , day и year теперь допускают значение null. |
Примеры
Пример #1 Пример использования функции mktime()
// Устанавливаем используемый по умолчанию часовой пояс.
date_default_timezone_set ( ‘UTC’ );
?php
// Выводит: 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()
Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет «Jan-01-1998».
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 ));
?>?php
Пример #3 Последний день месяца
Последний день любого месяца можно вычислить как «нулевой» день следующего месяца, не -1 день. Оба приведённых ниже примера выведут «Последний день февраля 2000 г.: 29».
$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
Смотрите также
- Класс DateTimeImmutable
- checkdate() — Проверяет корректность даты по григорианскому календарю
- gmmktime() — Возвращает локальную метку времени Unix для времени по Гринвичу
- date() — Форматирует временную метку Unix
- time() — Возвращает текущую метку системного времени Unix
User Contributed Notes
- Функции даты и времени
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get
Converting To And From Decimal Time In PHP
Note: This post is over two years old and so the information contained here might be out of date. If you do spot something please leave a comment and we will endeavour to correct.
To convert a time value into a decimal value representing the number of minutes can be useful for certain calculations. The following function takes a time as a string of hh:mm:ss and returns a decimal value in minutes.
If we take the time of 11:11:11 this gets split into 3 parts by the explode() function into hours, minutes and seconds, which then gets treated in the following way:
The function can be used as follows:
The reverse of this function takes the decimal value and returns a string in the format hh:mm:ss.
This function can be used as follows:
Note that these functions deal with amounts of time, not the time of day. Converting between time and decimal time of day requires a different set of calculations.
UPDATE: Thanks to an anonymous poster for pointing out some errors, these have now been corrected.
Phil is the founder and administrator of #! code and is an IT professional working in the North West of the UK. Graduating in 2003 from Aberystwyth University with an MSc in Computer Science Phil has previously worked as a database administrator, on an IT help desk, systems trainer, web architect, usability consultant, blogger and SEO specialist. Phil has lots of experience building and maintaining PHP websites as well as working with associated technologies like JavaScript, HTML, CSS, XML, Flex, Apache, MySQL and Linux.
Want to know more? Need some help?
Let us help! Hire us to provide training, advice, troubleshooting and more.
Support Us!
Please support us and allow us to continue writing articles.
Comments
Your code indeed works in the manner you have described, however there are a couple of finer details that caused issues for me when using the code.
In the time_to_decimal function, line 12 should read as follows:
As it is written in your post, the seconds are actually representing fractions of an hour (1/3600th) as opposed to fractions of a minute (1/60th).
We have the same issue in the decimal_to_time function as well as an issue in regards to the round() function. I’ve corrected the decimal_to_time function as follows:
round() in lines 2 and 3 have been replaced by floor(). This is due to the behavior of round() returning 1 when given .5. An example is as follows:
Say we are converting 1:30:30 into a decimal representing minutes. Using the two functions posted we would have
In the example, line 2 of the original code calculates to — round( 90 / 60 ) = round(1.5) = 2. Since we only want the numer of whole hours in the $decimal variable, we should use floor() instead. floor() will always round to the lowest whole number ( 1 in this case )
I hope this helps someone out there 🙂
Submitted by Anonymous on Mon, 10/03/2011 — 19:32
Thank you for all the hard work you put into that comment! I really appreciate it when a user posts such detailed comments on this blog 🙂
I have tested your examples and updated my code accordingly.
Submitted by philipnorton42 on Mon, 10/03/2011 — 19:55