Урок 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)?>

1580467439.

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

1579949039.

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

1603622639.

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

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

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

Функция 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')//вернет год

2020.

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

20.

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

10.

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

25.

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

25.

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

0.

echo'<p>'.date('H')//вернет часы (на час больше для МСК в 2020г.)

10.

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

12.

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

37.

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

25-10-2020.

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

25.10.2020.

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

10:12:37 25.10.2020.

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

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

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

28-12-2018.

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

<?/*Узнаем какой день недели был 28-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")

1603613557.

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

968533200.

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

1603699957.

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

1604218357.

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

1604405559.

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

1603922400.

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

1603054800.

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

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

19-10-2020.

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

Чтобы отнять или прибавить к дате определенный промежуток времени, следует пользоваться комбинацией из 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

Урок 11, Работа с датами в PHP, Урок, 11, Работа, с, датами, в, PHP, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, Создание сайтов, web-программирование, seo-продвижение, создание и раскрутка сайтов, вбиваю в топ-10, как гвозди, попробуйте бесплатно, Создание сайтов, web-программирование, seo-продвижение, Урок, 11, Работа, с, датами, в, PHP, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, раскрутка сайтов, Вбиваю в ТОП-10, как гвозди, раскрутка сайтов, Делаю и раскручиваю сайты, Дмитрий Владимирович

×

Ваше письмо