Как получить текущую дату и время в PHP, как в MySQL с помощью NOW()?
Использование date() и DateTime для получения текущей даты и времени
В PHP нет встроенной функции NOW(), как в MySQL, но есть несколько мощных инструментов для работы с датой и временем. Правильный подход — сгенерировать дату в PHP и передать её в SQL-запрос как строку. Вот основные способы:
1. Функция date() — простой и быстрый способ
Функция date() возвращает текущую дату и время в заданном формате. Для MySQL используйте формат 'Y-m-d H:i:s':
<?php
$currentDateTime = date('Y-m-d H:i:s'); // Пример: 2025-04-05 14:30:00
echo $currentDateTime;
?>
Теперь используйте эту переменную в запросе. Важно: всегда используйте подготовленные выражения (prepared statements) для защиты от SQL-инъекций:
<?php
$title = $_POST['title'];
$createdAt = date('Y-m-d H:i:s');
$stmt = $pdo->prepare("INSERT INTO posts (title, created_at) VALUES (:title, :created_at)");
$stmt->execute(['title' => $title, 'created_at' => $createdAt]);
?>
2. Класс DateTime — объектно-ориентированный подход
Класс DateTime предоставляет больше гибкости. Вы можете создать объект, форматировать его и даже изменять часовой пояс:
<?php
$now = new DateTime(); // Текущее время сервера
$createdAt = $now->format('Y-m-d H:i:s'); // Форматируем для MySQL
// Или сразу с часовым поясом:
$nowUTC = new DateTime('now', new DateTimeZone('UTC'));
$createdAtUTC = $nowUTC->format('Y-m-d H:i:s');
?>
3. Использование timestamp
Если вам нужно только время в формате Unix timestamp (количество секунд с 1970 года), используйте time():
<?php
$timestamp = time(); // Например: 1743869400
// В MySQL можно хранить как INT или использовать FROM_UNIXTIME()
$sql = "INSERT INTO posts (title, created_at) VALUES (:title, FROM_UNIXTIME(:timestamp))";
?>
Почему это лучше, чем NOW() в SQL?
- Контроль часовых поясов: Вы можете задать часовой пояс в PHP (например,
date_default_timezone_set('Europe/Moscow')), и дата будет одинаковой для всех запросов. - Гибкость: Вы можете модифицировать дату перед вставкой (например, добавить 1 час:
$now->modify('+1 hour')). - Логирование: Если нужно вывести дату на экран до сохранения, вы уже имеете её в переменной.
- Безопасность: При использовании подготовленных выражений вы избегаете SQL-инъекций.
Рекомендация для новичков
Начните с date('Y-m-d H:i:s') в сочетании с PDO и подготовленными выражениями. Это самый простой и надёжный путь. Если проект вырастет, переходите на DateTime — он удобнее для сложных манипуляций.
Альтернативный подход: использование Carbon (библиотека для Laravel)
Если вы работаете с фреймворком Laravel или просто хотите более удобный синтаксис, рекомендую библиотеку Carbon — это расширение класса DateTime. Она устанавливается через Composer:
composer require nesbot/carbon
Пример использования:
<?php
use Carbon\Carbon;
$now = Carbon::now(); // Текущее время
$createdAt = $now->toDateTimeString(); // '2025-04-05 14:30:00'
// Или с часовым поясом:
$nowMoscow = Carbon::now('Europe/Moscow');
$createdAtMoscow = $nowMoscow->format('Y-m-d H:i:s');
// Запрос с подготовленным выражением:
$stmt = $pdo->prepare("INSERT INTO posts (title, created_at) VALUES (:title, :created_at)");
$stmt->execute(['title' => $title, 'created_at' => $createdAt]);
?>
Преимущества Carbon:
- Человекочитаемые методы:
Carbon::yesterday(),Carbon::tomorrow(),$now->addDays(5). - Локализация:
$now->locale('ru')->isoFormat('LL')вернёт "5 апреля 2025 г.". - Сравнение дат:
$now->gt($otherDate)(больше),$now->diffForHumans()("5 минут назад").
Однако для простых проектов без фреймворка нативного DateTime или date() более чем достаточно. Carbon — это выбор для крупных приложений, где активно работают с датами.
Ответов пока нет.
Войдите чтобы оставить ответ