Урок 11. Работа с датами в PHP

Урок 11. Работа с датами в PHP

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Урок 11. Работа с датами в PHP

Урок 11. Работа с датами в PHP

www.homa.xp3.biz 

Теория

Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.

Функция time, формат timestamp

Функция time возвращает разницу в секундах между 1.1.1970 и текущим моментом времени. Такое представление даты называется форматом timestamp.

Зачем нужен timestamp?

Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.

К примеру, у меня есть timestamp за 1 января текущего года и timestamp за текущий момент времени. Отнимаем 1 от другого и получаем разницу между этими моментами в секундах. Делим эту разницу на 60 и получаем разницу в минутах (в 1 минуте 60 секунд). Делим еще на 60 и получаем разницу в часах. И т.д.

С помощью функции time можно получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:

Функция mktime

Функция mktime работает аналогично функции time, но в отличие от нее принимает параметры: mktime (час,минута,секунда,месяц,день,год) (внимание, месяц и день переставлены местами на американский манер). Примеры:

<?/*Функция вернет timestamp для 31.1.2028 12 часов 43 минуты 59 секунд:*/echo mktime(12,43,59,1,31,2028)?>

1832928239.

Параметры можно опускать с конца. Если мы не напишем год (последний параметр) - то автоматически возьмется текущий год, если не напишем еще и день (предпоследний параметр) - то возьмется текущий день и текущий год. И так далее:

<?/*Функция вернет timestamp для 31 января текущего года 12 часов 43 минуты 59 секунд:*/echo mktime(12,43,59,1,31)?>

1612089839.

<?/*Функция вернет timestamp для номер текущего дня января текущего года 12 часов 43 минуты 59 секунд:*/echo mktime(12,43,59,1)?>

1610793839.

<?/*Функция вернет timestamp текущего дня текущего месяца текущего года 12 часов 43 минуты 59 секунд:*/echo mktime(12,43,59)?>

1618566239.

Решим типичную задачу на time и mktime. Пусть нам нужно найти разницу в секундах между текущим моментом времени и полуднем (12 часов 0 минут 0 секунд) 1 февраля (февраль - это месяц номер 2) 2008:

<?/*Функция time() вернет текущий момент времени в формате timestamp, а mktime - за заданную дату. Отнимем результаты друг от друга и получим разницу в секундах:*/echo time()-mktime(12,0,0,2,1,2008)?>

Полученная разница в секундах будет выглядеть так: 416723827 (обновите страницу и это число поменяется).

Функция date

Функция date выводит текущие дату и время в заданном формате.

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

Команды (заглавные буквы отличаются от обычных, обратите внимание!):

U - количество секунд, прошедших с 1.1.1970г. (т.е. timestamp).

z - номер дня от начала года.

Y - год, 4 цифры.

y - год, 2 цифры.

m - номер месяца (с 0 спереди).

n - номер месяца без 0 впереди.

d - номер дня в месяце, всегда 2 цифры (т.е. 1-я может быть 0).

j - номер дня в месяце без предваряющего 0.

w - день недели (0 - воскресенье, 1 - понедельник и т.д.).

h - часы в 12-часовом формате.

H - часы в 24-часовом формате.

i - минуты.

s - секунды.

L - 1, если високосный год, 0, если не високосный.

W - порядковый номер недели года.

t - количество дней в указанном месяце.

Примеры работы с date:

echo'<p>'.date('Y')//вернет год

2021.

echo'<p>'.date('y')//вернет 2 последних цифры года

21.

echo'<p>'.date('m')//вернет номер месяца

04.

echo'<p>'.date('d')//вернет номер дня в месяце

16.

echo'<p>'.date('j')//вернет номер дня в месяце (без 0 спереди)

16.

echo'<p>'.date('w')//вернет день недели (воскресенье - это 0)

5.

echo'<p>'.date('H')//вернет часы

17.

echo'<p>'.date('i')//вернет минуты

37.

echo'<p>'.date('s')//вернет секунды

07.

echo'<p>'.date('d-m-Y')//вернет формат '31-08-2018'

16-04-2021.

echo'<p>'.date('d.m.Y')//вернет формат '31.08.2018'

16.04.2021.

echo'<p>'.date('H:i:s d.m.Y')//вернет формат '12:28:58 31.06.2013'

17:37:07 16.04.2021.

2-й параметр функции date

Функция date имеет 2-й необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан 2-м параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):

<?echo date('d-m-Y',mktime(0,0,0,12,28,18))/*вернет '31-12-2018'*/?>

28-12-2018.

Этим можно воспользоваться, чтобы узнать номер дня недели за определенную дату. Просто передадим ее 2-м параметром с помощью функции mktime, а 1-м параметром поставим управляющий символ 'w':

<?/*Узнаем какой день недели был 31-12-2018:*/echo date('w',mktime(0,0,0,12,28,18))/*вернет '0' - воскресенье*/?>

5.

Функция strtotime

Функция strtotime - это аналог функции mktime (тоже возвращает timestamp), только в отличие от нее принимает дату в более свободном формате.

К примеру, я могу передать ей строку '2028-12-31' и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.

Что можно делать еще: можно написать так: strtotime('now'), и мы получим текущий момент времени, или так: strtotime('next Monday'), и мы получим следующий понедельник (Monday по-английски 'понедельник').

Все форматы можно посмотреть тут: gnu.org/software/tar/manual/html_chapter/tar_7.html#Date-input-formats

Примеры:

echo'<p>'.strtotime("now")

1618583827.

echo'<p>'.strtotime("10 September 2000")

968533200.

echo'<p>'.strtotime("+1 day")

1618670227.

echo'<p>'.strtotime("+1 week")

1619188627.

echo'<p>'.strtotime("+1 week 2 days 4 hours 2 seconds")

1619375829.

echo'<p>'.strtotime("next Thursday")

1619038800.

echo'<p>'.strtotime("last Monday")

1618174800.

Следующий код вернет дату предыдущего понедельника:

<?echo date('d-m-Y',strtotime("last Monday"))?>

12-04-2021.

Как добавить или отнять дату

Чтобы отнять или прибавить к дате определенный промежуток времени, следует пользоваться комбинацией из 3 функций: date_create подготавливает дату к работе (дата должна быть в формате год-месяц-день), создавая так называемый объект date, с которым производятся дальнейшие манипуляции, date_modify прибавляет или отнимает, date_format выводит получившуюся дату в заданном формате.

Пример 1

Создать объект с датой за 2028 12 месяц 31 день, затем прибавить к ней 1 день и вывести в формате 'день.месяц.год':

<?$d=date_create('2028-12-31');date_modify($d,'1 day');echo date_format($d,'d.m.Y')?>

01.01.2029.

Пример 2

Создать объект с датой за 2028 12 месяц 31 день, затем прибавить к ней 3 дня и выведем в формате 'день.месяц.год':

<?$d=date_create('2028-12-31');date_modify($d,'3 days');echo date_format($d,'d.m.Y')?>

03.01.2029.

Пример 3

Создать объект с датой за 2028 12 месяц 31 день, затем прибавить к ней 3 дня и 1 месяц и выведем в формате 'день.месяц.год':

<?$d=date_create('2028-12-31');date_modify($d,'3 days 1 month');echo date_format($d,'d.m.Y')?>

03.02.2029.

Пример 4

Создать объект с датой за 2028 1 месяц 1 день, затем отнять от нее 1 день и вывести в формате 'день.месяц.год':

<?$d=date_create('2028-01-01');date_modify($d,'-1 day');echo date_format($d,'d.m.Y')?>

31.12.2027.

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович: 8-965-148-98-02, diplom07@mail.ru.
Печатать страницу: Урок 11. Работа с датами в PHP

Новое на сайте: О переделке сайта Консультации по сайту trim (функция обрезки пробелов в конце и начале переменной Передача переменных из JavaScript в PHP и наоборот Многоразмерные числа (BigInt) на JavaScript Генератор многоразрядных кодов Необходимость применения тяжелых CMS 16-ные числа Дробная часть числа и ее отделение Адрес страницы и условие для переменной Всплывающий текст с затемнением Использование памяти браузерами Расширения Chrome Короткие и ламповые цвета Всплывающее окно Рисунок, всплывающий по клику Принудительное открытие документа в новом окне

Сделать заказ сайта или продвижения сайта (Урок 11. Работа с датами в PHP)
×

Ваше письмо