Анонсы:
|
PHP. Урок 9 Работа с временем и датойУрок 9. Работа с временем и датойВ этом уроке вы научитесь сохранять, показывать и изменять значения даты и времени в PHP. Формат датыВ PHP нет специального типа данных для хранения значения даты. Поэтому сначала нужно определиться с тем, как лучше хранить эти значения. Выбор формата данныхЧасто встречаются даты, записанные в структурированном виде. Например, 05/03/1974 или 2001-12-31. Такой формат не подходит для обработки даты. Но второй вариант удобней первого. В нем данные следуют в порядке важности — сначала год, потом месяц и затем день. Поэтому сравнить две даты можно с помощью стандартных операторов отношения в PHP. Строка 2002-01-01 больше, чем 2001-12-31. Но так как операции сравнения быстрее работают с числами, лучше хранить данные в числовом виде. Например, 20020201; тогда формат будет YYYYMMDD. Его можно расширить для того, чтобы хранить время. Тогда формат примет следующий вид: YYYYMMDDHHMMSS. Как видим, все элементы расположены в порядке уменьшения веса. К сожалению, такой формат не позволяет выполнять арифметические операции. Конечно, можно добавить один к 20040201, но если следующий календарный день относится к другому месяцу, получим бессмысленный результат. Например, добавив единицу к 20030531, получим бессмысленную дату — 32 мая. Формат временной метки UnixВ формате временной метки Unix дата задается в целочисленном представлении. Его значение отсчитывается в секундах от полуночи 1 января 1970 года. Начало эпохи Unix. Нулевая временная метка соответствуют 12 часам ночи 1 января 1970 года по гринвичскому поясу (GMT). Эта дата также называется началом эпохи Unix. В данный момент дата и время состоят из десяти цифр в формате временной метки. Функция time позволяет определить текущее значение временной метки: Формат временной метки Unix очень удобен для расчетов, потому что время задается в секундах. Например, чтобы увеличить время на час, нужно прибавить 3600 секунд к значению временной метки. Если же прибавить 86400, время изменится на день. Потому что час состоит из 3600 секунд, а день – из 86400. Но у этого формата есть один недостаток – нельзя работать с датами до 1970 года. Правда, на некоторых системах поддерживаются отрицательные значения временной метки, и можно обрабатывать даты до эпохи Unix. Но это работает не всюду, и лучше его не использовать. Временная метка хорошо подходит для работы с текущим временем, но не всегда – для дней рождения или важных исторических дат. Поэтому перед использованием нужно убедиться в том, что диапазон охватывается форматом временной метки. Ограничение временной метки. Максимальное значение временной метки Unix зависит от архитектуры системы. Большинство систем использует 32-битное целое, чтобы хранить значение временной метки. Поэтому максимальное значение будет 3:14, 19 января 2038 года. Работа с временной меткойИногда лучше использовать собственный формат даты, но в большинстве случаев подойдет формат временной метки. Рассмотрим, как с ним работать в PHP. Форматирование датыВ уроке 1, "Знакомство с PHP", используется функция date. Она показывает текущую дату с форматированием, которое задается в аргументе: На выходе получим: Второй необязательный аргумент для date задает значение даты, которую нужно отобразить, в формате временной метки. Вот пример вывода даты с десятичным значением временной метки: Коды форматирования для функции date перечислены в табл. 9.1. Таблица 9.1. Коды форматирования для date
Перевод в формат временной меткиДля того чтобы узнать значение временной метки для нужной даты, в PHP есть готовая функция mktime, которая рассчитывает его на основе заданной даты и времени. Порядок аргументов следующий: час, минуты, секунды, месяц, день и год. В примере ниже переменной $timestamp присваивается значение временной метки, которое соответствует 25 декабрю 2001 года в 8 часов утра: Формат временной метки Unix начинается с1 января 1970 года в полночь по GMT. Функция mktime возвращает значение метки на основе часового пояса, который установлен на Web-сервере. Например, mktime с одинаковыми параметрами аргумента для Техаса вернет значение временной метки на 3600 больше, чем для компьютера в Нью-Йорке. Безопасное дневное время. Если формат временной метки используется для хранения даты, то три первых аргумента mktime влияют на значение только в полночь, когда время может изменить дату. Среднее время по гринвичскому меридиану. Функция gmmktime возвращает время в формате временной метки относительно GMT (Лондонское время, где используется безопасное дневное время). Функция mktime – нестрогая и позволяет вводить бессмысленные аргументы. Например, несуществующий день месяца. Если попытаться узнать значение временной метки для 29 февраля в невисокосном году, на выходе получим значение для 1 марта: Это позволяет выполнять различные арифметические опреции с датой и временем. В примере ниже рассчитывается и выводится дата и время для 37 часов после полудня 30 декабря 2001 года: Просто прибавляя нужное значение к одному из аргументов в mktime, можно смещать искомое значение временной метки. На выходе получим следующий вид для даты и времени: В этой дате корректно сместились все значения: день, месяц, год и время. Здесь учитывается то, что декабрь последний месяц в году, и количество дней в нем. Значение даты в формате DD-MM-YYYY легко перевести в формат временной метки. Для этого нужно выделить значения между дефисами. Функции explode передается символ-разделитель и строка, которую нужно разбить на части. На выходе получим массив выделенных значений. В примере ниже значение даты разбивается на компоненты, и рассчитывается значение временной метки: Функция strtotime позволяет автоматически получать значение временной метки из различных форматов представления даты. Вот примеры для различных форматов даты: Нужно помнить, что в последнем примере формат имеет вид MM/DD/YYYY, а не DD/MM/YYYY. Получение информации из значения временной меткиМожно использовать функцию date, чтобы узнать часть или всю информацию о дате на основе значений временной метки. Но в PHP для этих целей есть специальная функция getdate, которая возвращает различные параметры на основе значений временной метки. Функции getdate передается значение временной метки, а на выходе получаем ассоциированный массив с ключами, которые перечислены в табл. 9.2. Таблица 9.2. Значения ключей, возвращаемых функцией getdate
В примере ниже функция getdate определяет, будний или выходной день: Нужно помнить, что getdate без аргумента возвращает массив с индексами из табл. 9.2 для текущего времени. РезюмеВ этом уроке вы узнали, как работать со значениями даты и времени в PHP. В следующем уроке вы узнаете о классах в PHP и о том, как использовать библиотеки классов от сторонних разработчиков. |
Погода в Рудне на 10 Дек 2024 г. 704 - Вьетнамских донгов - 1 |