php как узнать сколько дней в месяце
Работа с датами в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.
Функция time, формат timestamp
Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени. Такое представление даты называется форматом timestamp.
Зачем нужен timestamp?
Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.
С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:
Функция mktime
Функция mktime работает аналогично функции time, но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:
Полученная разница в секундах будет выглядеть так: 686662587 (обновите страницу и это число поменяется).
Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.
Функция date
Функция date выводит текущие дату и время в заданном формате.
Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Примеры работы с date:
Второй параметр функции date
Функция date имеет второй необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):
Функция strtotime
Следующая полезная функция, которую мы разберем, называется strtotime.
К примеру, я могу передать ей строку ‘2025-12-31’ и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.
Все форматы можно посмотреть тут.
Следующий код вернет дату предыдущего понедельника:
Как добавить или отнять дату
Пример 1
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 2
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 3
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 4
Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
date — Форматирует вывод системной даты/времени
Описание
Список параметров
Шаблон результирующей строки ( string ) с датой. См. параметры форматирования ниже. Также существует несколько предопределенных констант даты/времени, которые могут быть использованы вместо этих параметров. Например: DATE_RSS заменяет шаблон ‘D, d M Y H:i:s’.
Возвращаемые значения
Ошибки
Список изменений
Версия | Описание | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5.1.0 | Допустимым диапазоном дат для временных меток обычно являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Они соответствуют минимальному и максимальному значению 32-битного целого числа со знаком). Однако для PHP версии ниже 5.1.0 в некоторых операционных системах (например, Windows) этот диапазон был ограничен датами 01-01-1970 до 19-01-2038. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5.1.0 |
Символ в строке 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 |
Ниже представлены некоторые примеры получения фактической информации о дате и времени:
Задачи на даты в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Перед решением задач изучите теорию к данному уроку.
Примеры решения задач
Задача
Задача. Выведите 23 сентября 2031 года, 12:58:59 в формате timestamp.
Можно также воспользоваться функцией strtotime, если представить нужную дату в формате 2031-09-23 12:58:59:
Задача
Задача. Найдите разницу между 1 сентября 2010 года, 7:25:59 и текущим моментом времени в секундах.
Задача. Выведите текущую дату-время в формате ‘2025.12.31 12:59:59’.
Решение: воспользуемся функцией date, передав ей управляющие команды в таком порядке: год (команда Y), потом точку как символ, потом месяц (команда m), опять точку, день (команда d), час (команда H), двоеточие, минуту (команда i), секунду (команда s). Получится такая строка: ‘Y.m.d H:i:s’. Подставим ее в функцию date:
Задача. Выведите 1-го сентября текущего года в формате ‘2021.09.01’.
Решение: для начала с помощью функции mktime преобразуем 1-го сентября текущего года в формат timestamp. Мы это делаем для того, чтобы подставить найденное число вторым параметром в функцию date (а первым параметром для date мы укажем формат вывода).
Ну, а теперь подставим найденный timestamp в функцию date:
Задача. Узнайте, какой день недели (словом) был 1 сентября 2010 года.
Продолжим решать нашу задачу: мы вывели номер дня недели, а по задаче его следует вывести словом. Для этого составим массив дней недели $week и с его помощью выведем то, что нам нужно. Вот этот массив:
Совместим теперь то, что вернет нам date, с нашим массивом $week:
Задача. Дана дата в формате ’31-12-2025′. С помощью функций mktime и explode переведите эту дату в формат timestamp.
Решение: разобьем строку ’31-12-2025′ функцией explode в массив $arr:
Задачи для решения
Timestamp: time и mktime
Выведите текущее время в формате timestamp.
Выведите 1 марта 2025 года в формате timestamp.
Выведите 31 декабря текущего года в формате timestamp. Скрипт должен работать независимо от года, в котором он запущен.
Найдите количество секунд, прошедших с 13:12:59 15-го марта 2000 года до настоящего момента времени.
Найдите количество целых часов, прошедших с 7:23:48 текущего дня до настоящего момента времени.
Функция date
Выведите на экран текущий год, месяц, день, час, минуту, секунду.
Выведите текущую дату-время в форматах ‘2025-12-31’, ‘31.12.2025’, ‘31.12.13’, ’12:59:59′.
С помощью функций mktime и date выведите 12 февраля 2025 года в формате ‘12.02.2025’.
Создайте массив дней недели $week. Выведите на экран название текущего дня недели с помощью массива $week и функции date. Узнайте какой день недели был 06.06.2006, в ваш день рождения.
Создайте массив месяцев $month. Выведите на экран название текущего месяца с помощью массива $month и функции date.
Найдите количество дней в текущем месяце. Скрипт должен работать независимо от месяца, в котором он запущен.
Сделайте поле ввода, в которое пользователь вводит год (4 цифры), а скрипт определяет високосный ли год.
Сделайте форму, которая спрашивает дату в формате ‘31.12.2025’. С помощью функций mktime и explode переведите эту дату в формат timestamp. Узнайте день недели (словом) за введенную дату.
Сделайте форму, которая спрашивает дату в формате ‘2025-12-31’. С помощью функций mktime и explode переведите эту дату в формат timestamp. Узнайте месяц (словом) за введенную дату.
Сравнение дат
Сделайте форму, которая спрашивает две даты в формате ‘2025-12-31’. Первую дату запишите в переменную $date1, а вторую в $date2. Сравните, какая из введенных дат больше. Выведите ее на экран.
На strtotime
Дана дата в формате ‘2025-12-31’. С помощью функции strtotime и функции date преобразуйте ее в формат ’31-12-2025′.
Сделайте форму, которая спрашивает дату-время в формате ‘2025-12-31T12:13:59’. С помощью функции strtotime и функции date преобразуйте ее в формат ’12:13:59 31.12.2025′.
Прибавление и отнимание дат
В переменной $date лежит дата в формате ‘2025-12-31’. Прибавьте к этой дате 2 дня, 1 месяц и 3 дня, 1 год. Отнимите от этой даты 3 дня.
Задачи
Узнайте сколько дней осталось до Нового Года. Скрипт должен работать в любом году.
Сделайте форму с одним полем ввода, в которое пользователь вводит год. Найдите все пятницы 13-е в этом году. Результат выведите в виде массива дат.
Узнайте какой день недели был 100 дней назад.
PHP | количество дней за текущий месяц в диапазоне дат
я пытаюсь получить даты текущего месяца или любого другого месяца из диапазона дат.
Предположим, у меня есть диапазон дат, как показано ниже.
Я хочу считать только дни / даты текущего месяца «February»
что приведет к 3, если начальная дата и конечная дата выше единицы.
Обновить:
Я думаю, что не мог объяснить свой вопрос,
если я хочу, чтобы программно вывезти дни декабря месяца
21 день с даты начала 2014-12-10 ;
Даты находятся в диапазоне программно из базы данных.
ОБНОВЛЕНИЕ 2:
Другой простой пример
Предположим, что для работника утверждены листья 28-1-2015 в 6-2-2015
Так что здесь сотрудники должны были начать работу
Так что Total Leaves Сотрудник будет принимать это
что дало бы мне всего листьев 9 или же 10 дней
Но если мы увидим, эти листья разделены на два разных месяца.
И я хочу создать отчет, и я хочу увидеть, сколько сотрудников ушло за конкретный месяц, то есть, допустим, в прошлом месяце January
это будет 4 дня, я полагаю, для дат ниже, поскольку даты ниже входят в диапазон дат, и они относятся к январю.
так что если бы я хотел, чтобы результат массива каждого месяца уходил, это было бы
быть как
Решение
Скорректировано после обновления в вопросе
Хорошо, теперь я настроился после вашего последнего обновления. Надеюсь, это то, что вы ищете:
- php к дате прибавить дни к дате
- php какой день недели