Основным временным данным, используемым в PHP, является время в секундах, прошедшее с начала 1 января 1970 года. Это временное данное называется в PHP меткой времени (timestamp).
Получить метку времени для заданной даты и времени можно с помощью функции
int mktime([int hour [, int minute [, int second
[, int month [, int day [, int year]]]]]])
где hour, minute и second – значения соответственно часа, минуты и секунды, month – значение индекса месяца (от 1 до 12), day – значение дня в месяце (от 1 до 31), year – значение года. Если параметры, начиная с некоторого параметра, пропущены, то они заменяются значениями текущей даты и времени.
Получить метку времени для текущей даты и текущего времени можно с помощью функции
int time().
Для получения компонент даты и времени по заданной метке времени timestamp используется функция
array getDate([int timestamp]).
Если параметр при вызове функции не задан, выводятся компоненты для текущей даты и текущего времени. Функция возвращает ассоциативный массив со следующими ключами и значениями даты и времени:
· 'seconds' – количество секунд (от 0 до 59);
|
|
· 'minutes' – количество минут (от 0 до 59);
· 'hours' – количество часов (от 0 до 23);
· 'mday' – число в месяце (от 1 до 31);
· 'wday' – индекс дня недели в месяце (от 0 – воскресенье до 6 – суббота);
· 'mon' – индекс месяца (от 0 –январь до 11 – декабрь);
· 'year' – год (четыре цифры);
· 'yday' – индекс дня в году (от 0 до 365);
· 'weekday' – наименование дня недели (например, Friday);
· 'month' – наименование месяца (например, May);
· 0 – метка времени.
Функция
array getTimeOfDay()
возвращает ассоциативный массив со следующими ключами и значениями времени:
· 'sec' – количество секунд, прошедших с 1 января 1970 года до текущего момента;
· 'usec' – количество микросекунд, прошедших с последней секунды;
· 'minuteswest' – смещение к западу от Гринвича (в минутах);
· 'dsttime' – тип коррекции летнего времени – DST (Daylight Saving Time – светосберегающее время) (1 – летнее время, 0 – зимнее время, -1 – тип коррекции не определен).
Пример 4.6.130. Использование функций mktime(), time(), getDate() и getTimeOfDay():
1. Следующий фрагмент программы получает и выводит текущую дату и текущее время:
// Получение метки для текущей даты
// и текущего времени
$currentDateTime = time();
// Получение компонент для текущей даты
// и текущего времени
$dateTimeValue = getDate($currentDateTime);
// Вывод значений компонент текущей даты
echo "\nDate: ", $dateTimeValue['month'], " ",
$dateTimeValue['mday'], " ", $dateTimeValue['year'],
", ", $dateTimeValue['weekday'];
// Определение значения часа
$hour = $dateTimeValue['hours'];
$hour = $hour>9?$hour:'0'.$hour;
// Определение значения минуты
$minute = $dateTimeValue['minutes'];
$minute = $minute>9?$minute:'0'.$minute;
// Вывод значений компонент текущего времени
echo "\nTime: ", $hour, ":", $minute;
Вывод этого фрагмента имеет следующий вид:
|
|
2. Определение и вывод временной зоны и значения DST:
// Определение текущего времени
$timeValue = getTimeOfDay();
// Определение знака смещения от Гринвича
if($timeValue['minuteswest'] < 0)
$offsetSign = "+";
else
$offsetSign = "-";
// Определение DST
$DSTStatus = $timeValue['dsttime'] == 1?'on':'off';
// Вывод зоны и DST
echo "\nTimezone: ", $offsetSign,
abs($timeValue['minuteswest'])/60, " hours DST: ",
$DSTStatus;
В результате выполнения этого фрагмента будет выведена следующая строка:
3. Определение дня недели для заданной даты:
// Получение метки времени
// для 1 января 1957 года
$timestamp = mktime(0, 0, 0, 1, 1, 1957);
// Получение компонент даты
$dateValue = getDate($timestamp);
// Получение и вывод дня недели для заданной даты
echo "\nWeek day for ", $dateValue['month'], " ",
$dateValue['mday'], " ", $dateValue['year'],
" is ", $dateValue['weekday'];
В результате выполнения этого фрагмента будет выведена следующая строка:
Функция
bool checkDate(int month, int day, int year)
возвращает true, если дата (month – индекс месяца, day – день в месяце и year – год) является правильной и false – в противном случае. Дата считается правильной, если значение года лежит в диапазоне от 1 до 32767 включительно, значение индекса месяца лежит в диапазоне от 1 до 12, а день – в диапазоне от 1 до максимального значения для данного месяца – 30 или 31. Для количества дней в феврале (28 или 29) учитывается, является ли год високосным.
Пример 4.6.131. Использование функции checkDate():
Следующий фрагмент программы проверяет правильность задания дат 27 мая 2009 г. и 31 июня 2009 г.:
// Проверка первой даты
$isCorrectDate1 = checkDate(5,27,2009)?
"correct":"incorrect";
// Проверка второй даты
$isCorrectDate2 = checkDate(6,31,2009))?
"correct":"incorrect";
echo "5/27/2009 is $isCorrectDate1 date",
"\n6/31/2009 is $isCorrectDate2 date";
Вывод этого фрагмента имеет следующий вид:
Вторая дата является неверной, поскольку в июне 30 дней.