Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time .
Функция time, формат timestamp
Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени . Такое представление даты называется форматом timestamp .
Зачем нужен timestamp?
Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.
К примеру, у меня есть timestamp за 1-го января текущего года и timestamp за текущий момент времени . Я отниму один от другого и получу разницу между этими моментами в секундах . Поделю эту разницу на 60 и получу разницу в минутах (так как в минуте 60 секунд). Поделю еще на 60 - и получу разницу в часах. И так далее.
С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime :
Функция mktime
Функция mktime работает аналогично функции time , но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:
Параметры можно опускать с конца . Если мы не напишем год (последний параметр) - то автоматически возьмется текущий год, если не напишем еще и день (предпоследний параметр) - то возьмется текущий день и текущий год. И так далее:
Решим типичную задачу на time и mktime . Пусть нам нужно найти разницу в секундах между текущим моментом времени и полуднем (12 часов, 0 минут, 0 секунд) 1-го февраля (февраль - это месяц номер 2) 2000 года:
Полученная разница в секундах будет выглядеть так: 612717139 (обновите страницу и это число поменяется).
Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.
Функция date
Функция date выводит текущие дату и время в заданном формате.
Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Команды (заглавные буквы отличаются от обычных , обратите внимание!):
- U – количество секунд, прошедших с 1 января 1970 года (то есть timestamp).
- z – номер дня от начала года.
- Y – год, 4 цифры.
- y - год, две цифры.
- m – номер месяца (с нулем спереди).
- n – номер месяца без нуля впереди.
- d – номер дня в месяце, всегда две цифры (то есть первая может быть нулем).
- j – номер дня в месяце без предваряющего нуля.
- w – день недели (0 - воскресенье, 1 - понедельник и т.д.).
- h – часы в 12-часовом формате.
- H – часы в 24-часовом формате.
- i – минуты.
- s – секунды.
- L – 1, если високосный год, 0, если не високосный.
- W – порядковый номер недели года.
- t – количество дней в указанном месяце.
Примеры работы с date:
Второй параметр функции date
Функция date имеет второй необязательный параметр , который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):
Этим можно воспользоваться, чтобы узнать номер дня недели за определенную дату - просто передадим ее вторым параметром с помощью функции mktime , а первым параметром поставим управляющий символ "w" :
Функция strtotime
Следующая полезная функция, которую мы разберем, называется strtotime.
Функция strtotime - это аналог функции mktime (тоже возвращает timestamp), только в отличие от нее принимает дату в более свободном формате.
К примеру, я могу передать ей строку "2025-12-31" и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.
Что можно делать еще: можно написать так - strtotime("now") - и мы получим текущий момент времени, или так - strtotime("next Monday") - и мы получим следующий понедельник (Monday по-английски "понедельник").
Все форматы можно посмотреть .
Примеры работы:
Следующий код вернет дату предыдущего понедельника:
Как добавить или отнять дату
Чтобы отнять или прибавить к дате определенный промежуток времени, следует пользоваться комбинацией из трех функций: date_create - она подготавливает дату к работе (дата должна быть в формате год-месяц-день) создавая так называемый объект дата , с которым производятся дальнейшие манипуляции, date_modify - она прибавляет или отнимает, date_format - она выводит получившуюся дату в заданном формате. Чтобы вникнуть в работу с этими функциями изучите примеры ниже.
Пример 1
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 2
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 3
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 4
Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате "день.месяц.год"
Результат выполнения кода:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку .
Когда все решите - переходите к изучению новой темы.
Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time .
Функция time, формат timestamp
Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени . Такое представление даты называется форматом timestamp .
Зачем нужен timestamp?
Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.
К примеру, у меня есть timestamp за 1-го января текущего года и timestamp за текущий момент времени . Я отниму один от другого и получу разницу между этими моментами в секундах . Поделю эту разницу на 60 и получу разницу в минутах (так как в минуте 60 секунд). Поделю еще на 60 - и получу разницу в часах. И так далее.
С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime :
Функция mktime
Функция mktime работает аналогично функции time , но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:
Параметры можно опускать с конца . Если мы не напишем год (последний параметр) - то автоматически возьмется текущий год, если не напишем еще и день (предпоследний параметр) - то возьмется текущий день и текущий год. И так далее:
Решим типичную задачу на time и mktime . Пусть нам нужно найти разницу в секундах между текущим моментом времени и полуднем (12 часов, 0 минут, 0 секунд) 1-го февраля (февраль - это месяц номер 2) 2000 года:
Полученная разница в секундах будет выглядеть так: 612717139 (обновите страницу и это число поменяется).
Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.
Функция date
Функция date выводит текущие дату и время в заданном формате.
Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Команды (заглавные буквы отличаются от обычных , обратите внимание!):
- U – количество секунд, прошедших с 1 января 1970 года (то есть timestamp).
- z – номер дня от начала года.
- Y – год, 4 цифры.
- y - год, две цифры.
- m – номер месяца (с нулем спереди).
- n – номер месяца без нуля впереди.
- d – номер дня в месяце, всегда две цифры (то есть первая может быть нулем).
- j – номер дня в месяце без предваряющего нуля.
- w – день недели (0 - воскресенье, 1 - понедельник и т.д.).
- h – часы в 12-часовом формате.
- H – часы в 24-часовом формате.
- i – минуты.
- s – секунды.
- L – 1, если високосный год, 0, если не високосный.
- W – порядковый номер недели года.
- t – количество дней в указанном месяце.
Примеры работы с date:
Второй параметр функции date
Функция date имеет второй необязательный параметр , который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):
Этим можно воспользоваться, чтобы узнать номер дня недели за определенную дату - просто передадим ее вторым параметром с помощью функции mktime , а первым параметром поставим управляющий символ "w" :
Функция strtotime
Следующая полезная функция, которую мы разберем, называется strtotime.
Функция strtotime - это аналог функции mktime (тоже возвращает timestamp), только в отличие от нее принимает дату в более свободном формате.
К примеру, я могу передать ей строку "2025-12-31" и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.
Что можно делать еще: можно написать так - strtotime("now") - и мы получим текущий момент времени, или так - strtotime("next Monday") - и мы получим следующий понедельник (Monday по-английски "понедельник").
Все форматы можно посмотреть .
Примеры работы:
Следующий код вернет дату предыдущего понедельника:
Как добавить или отнять дату
Чтобы отнять или прибавить к дате определенный промежуток времени, следует пользоваться комбинацией из трех функций: date_create - она подготавливает дату к работе (дата должна быть в формате год-месяц-день) создавая так называемый объект дата , с которым производятся дальнейшие манипуляции, date_modify - она прибавляет или отнимает, date_format - она выводит получившуюся дату в заданном формате. Чтобы вникнуть в работу с этими функциями изучите примеры ниже.
Пример 1
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 2
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 3
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате "день.месяц.год"
Результат выполнения кода:
Пример 4
Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате "день.месяц.год"
Результат выполнения кода:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку .
Когда все решите - переходите к изучению новой темы.
Введение в ООП
-
Урок №
новая вкладка с new.code.mu
Введение -
Урок №
новая вкладка с new.code.mu
Свойства -
Урок №
новая вкладка с new.code.mu
Методы -
Урок №
новая вкладка с new.code.mu
Свойства и $this -
Урок №
новая вкладка с new.code.mu
Методы и $this -
Урок №
новая вкладка с new.code.mu
public private -
Урок №
новая вкладка с new.code.mu
Конструктор -
Урок №
новая вкладка с new.code.mu
Геттеры сеттеры -
Урок №
новая вкладка с new.code.mu
Свойства только для чтения -
Урок №
новая вкладка с new.code.mu
Один класс - один файл -
Урок №
новая вкладка с new.code.mu
Объекты в массиве -
Урок №
новая вкладка с new.code.mu
Начальные значения свойств в конструкторе
Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.
Замечание: Для получения метки времени из строкового представления даты можно использовать функцию strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (напрмер, функция MySQL UNIX_TIMESTAMP).
|
Замечание: Этот метод более надежен, чем вычитание и прибавление секунд к метке времени, так как mktime() учитывает любые неоднозначности в датах (переход на летнее/зимнее время и др.).
Приведем еще несколько примеров использования функции date() . Помните, что следует экранировать все символы, которые вы хотите видеть в результате работы функции без изменений. Это относится и к символам, которые в текущей версии PHP не распознаются как специальные, так как этим символам может быть назначено значение в следующих версиях. Используйте одинарные кавычки для предотвращения преобразования \n в перевод строки.
Пример 4. Форматирование с использованием date() |
Для вывода времени или даты в пользовательском формате существует функция date.
В этом примере на экран выводится текущяя дата в формате день/месяц/год в виде чисел. Прочитав эту статью до конца вы сможете выводить на экран текущую дату и время в любом формате.
Данная функция позволяет выводить не только текущую дату и время, но и преобразовывать метку времени в заданный формат. Метка времени - это число секунд, прошедших с момента основания linux. Это число можно получить, используя функцию time(). Метка времени в функции date является необязательным параметром.
Что бы получить формат, который вам нужен, вы можете использовать специальные модификаторы в первом параметре. Их достаточно много.
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
a | am или pm в нижнем регистре | am, pm |
A | AM или PM в верхнем регистре | AM, PM |
B | Время в стадарте Swatch Internet | От 000 до 999 |
c | Дата в формате ISO 8601 (добавлено в PHP 5) | 2005-06-11T11:11:11+00:00 |
d | День месяца, 2 цифры с ведущими нулями | от 01 до 31 |
D | Сокращенное наименование дня недели, 3 символа | от Mon до Sun |
F | Полное наименование месяца | от January до December |
g | Часы в 12-часовом формате без ведущих нулей | От 1 до 12 |
G | Часы в 24-часовом формате без ведущих нулей | От 0 до 23 |
h | Часы в 12-часовом формате с ведущими нулями | От 01 до 12 |
H | Часы в 24-часовом формате с ведущими нулями | От 00 до 23 |
i | Минуты с ведущими нулями | 00 to 59 |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, иначе 0 otherwise. |
j | День месяца без ведущих нулей | От 1 до 31 |
l (строчная "L") | Полное наименование дня недели | От Sunday до Saturday |
L | Признак високосного года | 1, если год високосный, иначе 0. |
m | Порядковый номер месяца с ведущими нулями | От 01 до 12 |
M | Сокращенное наименование месяца, 3 символа | От Jan до Dec |
n | Порядковый номер месяца без ведущих нулей | От 1 до 12 |
O | Разница с временем по Гринвичу в часах | +0200 |
r | Дата в формате RFC 2822 | Thu, 28 Jan 2011 15:11:14 +0200 |
s | Секунды с ведущими нулями | От 00 до 59 |
S | Английский суффикс порядкового числительного дня месяца, 2 символа | st, nd, rd или th. Применяется совместно с j |
t | Количество дней в месяце | От 28 до 31 |
T | Временная зона на сервере | Примеры: EST, MDT ... |
U | Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) | 1356361196 |
w | Порядковый номер дня недели | От 0 (воскресенье) до 6 (суббота) |
W | Порядковый номер недели года по ISO-8601, первый день недели - понедельник (добавлено в PHP 4.1.0) | Например: 42 (42-я неделя года) |
Y | Порядковый номер года, 4 цифры | Примеры: 1986, 2012 |
y | Номер года, 2 цифры | Примеры: 86, 12 |
z | Порядковый номер дня в году (нумерация с 0) | От 0 до 365 |
Z | Смещение временной зоны в секундах. Для временных зон западнее UTC это отрицательное число, восточнее UTC - положительное. | От -43200 до 43200 |
Если этот сайт оказался вам полезен, вы можете помочь в его развитии, поставив
Рассмотрим, как работать с датами и временем в PHP.
Время в Unix -компьютерах
Для Unix-компьютеров начало отсчета времени –– полночь 1 января 1970 года. Любая дата вычисляется как количество секунд (обозначаемое timestamp –– метка времени), прошедших с 1.01.1970 года. Эти соглашения также используются в PHP. Например, мы хотим перейти на день вперед. Тогда нужно лишь добавить к текущему значению timestamp 60×60×24 секунд.
Такая схема учета времени существенно облегчает операции с датами. Например, если одно значение timestamp больше другого, первое значение соответствует более поздней дате, чем второе.
Единицы времени в сек
Получение текущего времени
В PHP для получения текущего значения timestamp надо вызвать функцию time() без параметров, например:
Многие PHP-функции для работы с датой и временем в качестве аргумента принимают значение timestamp. Например, функция date() возвращает отформатированную в соответствии с заданным форматом строку даты, например:
Создание timestamp по дате
Функция mktime () создаст timestamp, если указать час, минуту, секунду, день месяца, месяц и год:
Функция strtotime ()
Функция формирует timestamp для даты, указанной в виде фразы на английском, например April 1 или Friday.
Значение даты нужно задавать в формате ГГГГ-ММ-ДД. Если функция strtotime не может преобразовать дату, она возвращает false.
Примеры использования функции date()
Встроенная функция floor() используется для того, чтобы отбросить дробную часть результата.
Следующий текст при первом чтении можно пропустить
Форматы даты в базах данных MySQL
Формат timestamp в PHP несовместим с форматом timestamp в СУБД MySQL.
В MySQL есть три типа полей даты и времени: DATA (дата), TIME (время), DATETIME (дата и время). Также имеется специальный тип данных TIMESTAMP, который работает подобно DATETIME, но автоматически обновляется в соответствие с текущим временем при каждой вставке или обновлении записей таблицы.
Для преобразования timestamp в формате PHP в формат MySQL можно использовать такой код:
Date("Y-m-d H:i:s", $timestamp)
Например, можем использовать “2008-10-01 13:23:40” как дату и время.
Чтобы получить PHP-timestamp из запроса SELECT, надо использовать SQL- функцию UNIX_TIMESTAMP():
SELECT UNIX_TIMESTAMP(дата) FROM таблица
В MySQL есть много и других полезных функций для работы с датой и временем.