Получение даты и времени в PHP

Вместо предисловия

Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров: — элементарное добавление даты в запись БД; — отображение времени; — вывод дат в различном формате; — проверка текущего времени на соответствие заданному таймеру; — определение срока между 2-мя датами и так далее.

Чтобы работать со временем было удобно, у каждого языка программирования имеются специальные типы данных, позволяющие хранить соответствующие значения. Обычно речь идёт о числовом значении, как целом, так и с плавающей точкой.

В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.

Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:

1602666005

Вы можете проверить вышеописанную команду и получить в PHP текущую дату и время самостоятельно, даже если не являетесь PHP-разработчиком — просто поместите код в любой онлайн-компилятор, вот один из многих. Так же рекомендуется делать и с остальным кодом — это поможет вам лучше понять работу описываемых в статье команд.

Screenshot_1-1801-634308.png

Но вернёмся к основной теме разговора. Благодаря коротенькому коду выше, мы получили от сервера текущее время — 1602666005 (у вас значение будет другим, ведь время не стоит на месте))).

Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.

Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.

Форматирование даты и времени с помощью PHP-функции date()

Параметр формата функции date() на самом деле представляет собой строку, которая может содержать несколько символов, что позволяет вам сгенерировать строку даты, содержащую различные компоненты даты и времени, такие как день недели, AM или PM и т. д. Вот некоторые из символов форматирования, связанные с датой, которые обычно используются в этой строке:

  • d — обозначает день месяца; две цифры с ведущими нулями (01 или 31)
  • D — обозначение дня недели в тексте в виде сокращения (с понедельника по воскресенье)
  • m — обозначает месяц цифрами с ведущими нулями (01 или 12)
  • M — обозначает месяц в тексте, сокращенно (с января по декабрь)
  • y — обозначают год двумя цифрами (08 или 14)
  • Y — обозначает год четырьмя цифрами (2008 или 2014)
Читайте также:  Скрипт отправки почты на PHP

Части даты можно разделить, вставив другие символы, например дефисы (-), точки (.), слеши (/) или пробелы, чтобы добавить дополнительное визуальное форматирование.

echo date(«d/m/Y») . «<br>»;
echo date(«d-m-Y») . «<br>»; echo date(«d.m.Y»); ?>

Вы можете использовать PHP-функцию date() для автоматического обновления срока действия авторских прав на вашем веб-сайте.

Точно так же вы можете использовать следующие символы для форматирования строки времени:

  • h — обозначает час в 12-часовом формате с ведущими нулями (от 01 до 12)
  • H — часы в 24-часовом формате с ведущими нулями (от 00 до 23)
  • i — минуты с ведущими нулями (от 00 до 59)
  • s — секунды с ведущими нулями (от 00 до 59)
  • a — представляют нижний регистр ante meridiem и post meridiem (am или pm)
  • A — обозначает верхний регистр Ante meridiem и Post meridiem (AM или PM)

PHP-код в следующем примере отображает дату в разных форматах:

echo date(«h:i:s») . «<br>»;
echo date(«F d, Y h:i:s A») . «<br>»; echo date(«h:i a»); ?>

Параметры функции date()

format Обязательный. Задает формат метки времени timestampНеобязательный. Задает отметку времени. По умолчанию текущая дата и время

Функция date() возвращает строку, которая отформатирована в соответствии с указанным шаблоном format. Параметр timestamp задает метку времени. Если timestamp не задан, тогда используется текущее системное время.

Примечание: Отметка времени — это последовательность символов, обозначающая дату и / или время, когда произошло определенное событие.

Обязательный параметр format функции date() указывает, как форматировать дату (или время). Формат задается управляющими командами (латиницей), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).

Ниже представлена таблица с расшифровкой некоторых символов в строке format:

Символ в строке formatОписаниеПример возвращаемого значения

День
d День месяца с 2-мя цифрами от 01 до 31
D День недели в текстовом формате, 3 символа от Mon до Sun
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Месяц
F Полное название месяца, например, January или March от January до December
m Порядковый номер месяца, 2 цифры от 01 до 12
M Сокращенное название месяца, 3 символа от Jan до Dec
Год
Y Порядковый номер года, 4 цифры Примеры: 1999, 2019
y Порядковый номер года, 2 цифры Примеры: 99, 19
Время
a Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
g Часы в 12-часовом формате от 1 до 12
G Часы в 24-часовом формате от 0 до 23
h Часы в 12-часовом формате от 01 до 12
H Часы в 24-часовом формате, 2 цифры от 00 до 23
i Минуты, 2 цифры от 00 до 59
s Секунды, 2 цифры от 00 до 59
Читайте также:  Урок 1 — Введение в Twitch CMS

Описание time и mktime

Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.

Для начала займёмся её использованием вместе с меткой текущей даты:

Собираем поисковый механизм на PHP/MySQL

Если мы запустим этот код, мы получим следующее:

180609 Sunday 21 May

что кажется немного странным, перед тем как мы посмотрели в руководство по PHP и узнали, что h в нижнем регистре обозначает время в 12-и часовом формате. Старая поговорка «Компьютер делает то, что вы ему говорите, а не то, что от него добиваетесь» говорит правду. У нас два выxoда. Первый это обойти h в нижнем регистре и написать следующее:

Результатом выполнения которого будет: 18h12 Sunday 21 May

Это может казаться немного более сложным, но представьте себе, что вы на самом деле xотели увидеть было «Сегодня Sunday 21 May 2000. Время где-то близко к 18h24.» Использование команды даты в этом случае было бы немного раздражающе.

Ранее я упомянул, что есть два способа для получения чего-то полезного от UNIX времени. Мы только что увидели date() и strftime(). Еще одной функцией является getdate(). Этой функции нужно только UNIX время в виде аргумента, и она возвращает ассоциативный массив элементов в дате.

Возвратит:

Sunday

Кроме «weekday», остальными частями массива являются:

* «seconds» — секунды
* «minutes» — минуты
* «hours» — часы
* «mday» — день месяца
* «wday» — день недели в числовом формате
* «mon» — месяц в числовом формате
* «year» — год
* «dyear» — день года в числовом формате
* «month» — полное имя месяца

Вот теперь мы можем создавать читаемые формы даты и времени:

Преобразование существующих дат в UNIX время

Часто у Вас может возникнуть необходимость работать с данными, которые уже наxодятся в некотором формате даты и времени. Я открыл базу данныx моиx клиентов Microsoft Access и обнаружил, что все даты там установлены в формате ГГГГ/ММ/ДД, это значит, что ввод текущей даты отобразится в виде 2000/05/27. Функция mktime() может взять значения отдельныx частей даты и преобразовать иx в UNIX время.

Формат функции следующий:

int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] );

Читайте также:  Настройка PHP с помощью php.ini

Слева на право — Вы обеспечиваете час, минуты, секунды, месяц, день, год. Последний аргумент определяет наxодитесь ли Вы во времени сбережения дневного света или нет. Этот аргумент является дополнительным и для простоты мы его опустим.

Скрипт будет иметь такой вид.

Защита сайта от спамеров с использованием PHP. Практическое применение кода подтверждения с картинки

Я вставил нули вместо часа, минуты и секунды так как мы иx не знаем и Вы должны что то туда поставить. Вставка нулей даст нам полночь, что по сути прекрасно. Конечно, сейчас Вы скажете (и будете правы), что я обманул и сам поставил туда нули. Тогда давайте сделаем еще раз, да так, чтобы скрипт сам разбирался что и куда ставить.

Ладно давайте немного усложним и вообразим, что вместо получения просто даты из базы данных Аccess, мы получили дату и время в таком формате:

2000/05/27 02:40:21 PM

Создание функции DateAdd для PHP

Как я уже говорил в начале — причиной написания этой статьи было то, что я не мог найти в PHP функцию аналогичную DateDiff в ASP. Теперь, когда мы объяснили как PHP работает с датой и временем, было бы удобно импортировать в PHP две функции работы с датой используемые в ASP. Первая — это функция DateAdd.

Интервалом является строковое выражение, определяющий интервал, который Вы xотите добавить. Например минуты или дни, номер это интервал, который Вы хотите добавить, а date и есть дата.

Интервалом может быть один из нижеизложенных:
yyyy год
q четверть
q четверть
m месяц
y день года
d день
w день недели
ww неделя года
h час
n минута
s секунда

Здесь w, y и d делают одно и то же, а именно добавляют 1 день к текущему дню, q добавляет 3 месяца, ww добавляет 7 дней.

Мы можем соxранить этот код под именем dateadd.inc затем запустить следующий код:

Возвращаемым значением которого будет:

15h41 Saturday 03 Jun
16h31 Saturday 03 Jun
Создание функции DateDiff для PHP

Согласно документации функция DateDiff «Возвращает количество интервалов между двумя датами».

Синтаксис функции таков:

DateDiff(interval,date1,date2)

Интервалы, которыми эта функция пользуется те же, что мы увидели в работе с функцией DateDiff. Ради простоты мы отбросим множество элементов функции DateDiff VB скриптов, которые иначе усложнили бы работы. В этом примере дополнительные аргументы функции DateDiff (определяющие начинается ли неделя с понедельника или воскресенья) не используются. Интервалы, которые мы собираемся разрешить следующие — «w», «d&q», «h», «n» и «s».

Давайте посмотрим, что мы сможем сделать:

После сохранения этого кода под именем datediff.inc, можем запустить следующий код:

который, в случае корректного конфигурирования, должен отобразить следующее:

Current time: 16h23 Saturday 03 Jun
Time plus 50 minutes: 17h13 Saturday 03 Jun
Interval between two times: 50

Источники
  • https://otus.ru/nest/post/1720/
  • https://artzolin.ru/php-theory/php-date-and-time/
  • https://www.wm-school.ru/php/php_date.php
  • https://www.internet-technologies.ru/articles/manipulirovanie-datoy-na-php.html

Рейтинг
( Пока оценок нет )
Блог о программировании, продвижении и дизайне.
Adblock
detector