
PHP предоставляет несколько встроенных функций для конвертации даты в секундный формат, что удобно для вычислений и хранения временных меток. Наиболее универсальным методом считается использование функции strtotime(), которая преобразует строковое представление даты в количество секунд, прошедших с 1 января 1970 года (Unix-время). Например, strtotime(‘2025-09-20 12:00:00’) возвращает точное количество секунд для указанного момента.
Для работы с объектами даты эффективнее применять класс DateTime. Создав объект $date = new DateTime(‘2025-09-20 12:00:00’), можно получить секунды с помощью метода getTimestamp(). Этот подход позволяет учитывать часовой пояс и корректно обрабатывать переходы на летнее/зимнее время.
При массовой конвертации дат в секунды важно учитывать тип входных данных. Строковые форматы должны соответствовать стандарту YYYY-MM-DD HH:MM:SS или быть совместимы с strtotime(). Для числовых данных, представляющих уже существующие временные метки, дополнительных преобразований не требуется. Такой подход минимизирует ошибки и повышает точность вычислений в приложениях, использующих временные интервалы.
Использование функции strtotime для преобразования строковых дат

Функция strtotime преобразует строковое представление даты в количество секунд с 1 января 1970 года (Unix-время). Она принимает строку в формате, который PHP может распознать, включая «YYYY-MM-DD», «DD.MM.YYYY», «next Monday», «last day of February» и комбинации времени, например «2025-09-20 14:30:00».
Пример использования для стандартной даты: $timestamp = strtotime('2025-09-20'); – вернёт целое число секунд с начала эпохи Unix.
Функция поддерживает относительные выражения: $tomorrow = strtotime('+1 day'); создаст метку времени на следующий день от текущей даты сервера.
Для работы с конкретным временем можно указывать часы, минуты и секунды: $timestamp = strtotime('2025-09-20 15:45:30');. Если время не указано, оно устанавливается как 00:00:00.
Чтобы избежать ошибок с форматом даты, рекомендуется использовать стандарт ISO 8601 («YYYY-MM-DD») или явно указывать порядок дня, месяца и года. Например, strtotime('20-09-2025') может работать некорректно, если установлен американский формат даты.
Функция возвращает false, если строку невозможно распознать. Это важно учитывать при обработке пользовательского ввода, проверяя результат перед дальнейшими вычислениями: if ($timestamp !== false) { /* действия */ }.
Для преобразования строки с часовым поясом можно использовать вторым параметром текущую метку времени или объект DateTime. Например: $timestamp = strtotime('2025-09-20 12:00:00', strtotime('now'));.
Использование strtotime позволяет интегрировать даты в функции date(), gmdate() и математические операции, например вычисление разницы между датами: $diff = strtotime('2025-10-01') - strtotime('2025-09-20'); – результат в секундах.
Преобразование объектов DateTime в таймстамп

В PHP объекты DateTime содержат дату и время в удобной для работы форме. Для получения Unix-таймстампа используется метод getTimestamp(). Он возвращает количество секунд с 1 января 1970 года 00:00:00 UTC до заданного момента.
Пример преобразования:
$date = new DateTime('2025-09-20 15:30:00');
$timestamp = $date->getTimestamp();
Результат выполнения кода выше для указанной даты будет числом, например 1753426200. Этот таймстамп удобно использовать для вычислений и хранения в базе данных.
Для массовой обработки дат можно использовать цикл и массив объектов DateTime. Таблица ниже показывает соответствие формата даты и результата метода getTimestamp():
| Дата и время | Таймстамп |
|---|---|
| 2025-01-01 00:00:00 | 1735689600 |
| 2025-06-15 12:45:30 | 1750104330 |
| 2025-12-31 23:59:59 | 1767225599 |
Для временных зон метод getTimestamp() учитывает объектную настройку. Если требуется преобразовать время в UTC, перед вызовом метода используйте $date->setTimezone(new DateTimeZone('UTC'));.
Метод совместим с объектами DateTimeImmutable. Это позволяет создавать неизменяемые объекты и безопасно получать таймстамп без изменения исходного объекта.
Вычисление разницы между двумя датами в секундах

- Создайте две переменные с исходными датами:
$date1 = '2025-09-20 12:00:00'; $date2 = '2025-09-21 14:30:00'; - Преобразуйте строки в секунды:
$timestamp1 = strtotime($date1); $timestamp2 = strtotime($date2); - Вычислите разницу:
$difference = $timestamp2 - $timestamp1; - Выведите результат:
echo $difference; // 95400
Разница в секундах учитывает часы, минуты и секунды. В приведенном примере 95400 секунд соответствуют 1 дню, 2 часам и 30 минутам.
Если даты могут находиться в разных часовых поясах, рекомендуется использовать класс DateTime с явным указанием зоны:
$dt1 = new DateTime('2025-09-20 12:00:00', new DateTimeZone('Europe/Moscow'));
$dt2 = new DateTime('2025-09-21 14:30:00', new DateTimeZone('Europe/Moscow'));
$difference = $dt2->getTimestamp() - $dt1->getTimestamp();
echo $difference;
- Использование
DateTimeпредотвращает ошибки при переходе на летнее/зимнее время. - Метод
getTimestamp()возвращает точное количество секунд с 1970 года. - Для отрицательных разниц порядок вычитания важен: всегда вычитайте более раннюю дату из более поздней.
Учёт часового пояса при переводе даты в секунды
В PHP функции strtotime() и mktime() интерпретируют время в соответствии с текущей настройкой часового пояса, заданной через date_default_timezone_set() или в php.ini. Если часовой пояс не указан, используются системные настройки, что может привести к расхождению секунд при работе с международными датами.
Для точного перевода даты в секунды рекомендуется явно задавать часовой пояс с помощью объекта DateTime. Например, $dt = new DateTime(‘2025-09-20 12:00:00’, new DateTimeZone(‘Europe/Moscow’)); $timestamp = $dt->getTimestamp(); Этот метод учитывает переходы на летнее и зимнее время и корректно вычисляет Unix-время.
Если требуется конвертация между часовыми поясами, можно использовать метод setTimezone(): $dt->setTimezone(new DateTimeZone(‘UTC’)); После этого $dt->getTimestamp() вернёт значение в секундах по UTC, что удобно для хранения в базах данных и последующих расчётов.
Использование функций gmdate() и gmmktime() полезно при работе исключительно с UTC. gmdate() форматирует дату по UTC, а gmmktime() создаёт метку времени без смещения часового пояса. Это предотвращает ошибки при переносе даты между разными серверами с различными локальными настройками.
Для автоматизации можно применять конфигурацию по умолчанию: date_default_timezone_set(‘UTC’); Это гарантирует, что все функции, возвращающие секунды, будут интерпретировать дату одинаково вне зависимости от локальных настроек сервера.
Обработка форматов даты, отличных от стандартного YYYY-MM-DD
PHP предоставляет функции для работы с нестандартными форматами даты, включая `strtotime()`, `DateTime::createFromFormat()` и `DateTimeImmutable::createFromFormat()`. `strtotime()` автоматически распознает многие форматы, например «31-12-2025» или «12/31/2025», но чувствителен к локали и разделителям.
Для точного разбора нестандартных форматов лучше использовать `DateTime::createFromFormat()`. Пример: для строки «31.12.2025 14:30» можно использовать:
$date = DateTime::createFromFormat('d.m.Y H:i', '31.12.2025 14:30');
После создания объекта `DateTime` его легко перевести в секунды с помощью метода `getTimestamp()`:
$timestamp = $date->getTimestamp();
Важно проверять ошибки разбора: `DateTime::getLastErrors()` возвращает массив с предупреждениями и ошибками. Например, при использовании формата «Y/m/d H:i:s» вместо «d.m.Y H:i» функция вернёт предупреждение о несоответствии.
Для форматов с текстовыми месяцами, такими как «25 December 2025», `strtotime()` или `DateTime::createFromFormat(‘d F Y’, $string)` корректно распознают месяц на английском. Для локализованных названий месяца необходимо установить `setlocale()` перед использованием `strftime()` или использовать расширение `IntlDateFormatter`.
При обработке пользовательского ввода рекомендуется строго определять ожидаемый формат и использовать соответствующий шаблон `createFromFormat()`. Это предотвращает некорректные конверсии и исключает ошибки при преобразовании в UNIX-время.
Для форматов с нестандартными разделителями (точка, пробел, слэш) шаблон формата должен точно совпадать с входной строкой, иначе объект даты создастся некорректно или вернётся `false`.
Таким образом, точное определение формата и проверка ошибок – ключ к корректной конверсии любых нестандартных дат в секунды с помощью PHP.
Проверка и обработка некорректных дат перед конверсией

Перед переводом даты в секунды необходимо убедиться, что она имеет корректный формат и допустимые значения. В PHP для этого удобно использовать функцию checkdate(), которая проверяет существование дня в указанном месяце и году. Например, checkdate(2, 30, 2025) вернёт false, так как 30 февраля не существует.
Для строковых дат рекомендуется использовать DateTime::createFromFormat() с последующей проверкой ошибок через DateTime::getLastErrors(). Это позволяет отловить неверные форматы, лишние символы или даты вне диапазона. Например:
$date = DateTime::createFromFormat(‘Y-m-d H:i:s’, ‘2025-02-30 12:00:00’);
$errors = DateTime::getLastErrors(); – массив $errors будет содержать предупреждения о невалидной дате.
Для автоматической нормализации можно использовать DateTimeImmutable с методами modify() или setDate(), чтобы корректировать перепутанные дни или месяцы без аварийного завершения скрипта. Например, дата 2025-02-31 после корректировки станет 2025-03-03.
Регулярная проверка и обработка некорректных дат снижает риск ошибок при конверсии в секунды и обеспечивает точность временных вычислений в приложении.
Вопрос-ответ:
Как с помощью PHP перевести конкретную дату в секунды?
В PHP для этого используется функция strtotime(). Она принимает строку с датой в привычном формате, например «2025-09-20 15:30:00», и возвращает количество секунд, прошедших с 1 января 1970 года (UNIX-время). Пример: $seconds = strtotime("2025-09-20 15:30:00");. После этого переменная $seconds будет содержать число секунд, которое можно использовать для вычислений или сравнения дат.
Можно ли учитывать часовой пояс при переводе даты в секунды?
Да, PHP позволяет работать с часовыми поясами через функцию date_default_timezone_set() или объект DateTimeZone. Например, если нужно перевести дату в секунды для конкретного часового пояса, создайте объект DateTime с этим часовым поясом: $dt = new DateTime("2025-09-20 15:30:00", new DateTimeZone("Europe/Moscow")); и затем вызовите $seconds = $dt->getTimestamp();. Это гарантирует, что время будет корректно учитываться относительно выбранного региона.
Какие форматы даты поддерживаются при использовании strtotime()?
Функция strtotime() распознаёт множество форматов: «YYYY-MM-DD», «DD-MM-YYYY», «YYYY/MM/DD HH:MM:SS», а также относительные выражения вроде «next Monday» или «+2 days». Однако для сложных или нестандартных форматов лучше использовать объект DateTime с методом createFromFormat(), который позволяет указать точный шаблон даты. Например: $dt = DateTime::createFromFormat("d.m.Y H:i", "20.09.2025 15:30");.
Как перевести дату с миллисекундами в секунды в PHP?
Стандартные функции strtotime() и DateTime возвращают время в секундах без миллисекунд. Если исходная дата содержит миллисекунды, их нужно отделить и добавить к секундам вручную. Например: $time = "2025-09-20 15:30:00.123"; list($dt, $ms) = explode(".", $time); $seconds = strtotime($dt) + ((int)$ms / 1000);. В результате $seconds будет содержать точное время с учётом миллисекунд.
Как сравнить две даты, переведённые в секунды, чтобы узнать, какая раньше?
После перевода дат в секунды можно использовать обычные операторы сравнения. Например: $time1 = strtotime("2025-09-20 12:00:00"); $time2 = strtotime("2025-09-20 15:30:00"); Сравниваем: if ($time1 < $time2) { echo "Первая дата раньше"; } else { echo "Вторая дата раньше"; }. Это удобно для сортировки или проверки условий без работы со строками и форматами даты.
Как с помощью PHP преобразовать дату в секунды с начала эпохи Unix?
В PHP для этого можно использовать функцию strtotime(). Она принимает строку с датой и возвращает количество секунд, прошедших с 1 января 1970 года. Например, код $seconds = strtotime('2025-09-20 12:00:00'); вернёт число секунд до указанного времени. Такой подход удобен для вычислений разницы между датами или хранения временных меток.
Можно ли перевести дату в секунды без использования strtotime()?
Да, можно воспользоваться объектом DateTime и методом getTimestamp(). Создаёте объект с нужной датой: $date = new DateTime('2025-09-20 12:00:00');, а затем получаете количество секунд: $seconds = $date->getTimestamp();. Этот способ позволяет работать с часовыми поясами и получать более точные результаты при вычислениях, связанных с временем.
