Функция NOW() в PHP
Заголовок: Существует ли функция PHP, возвращающая дату и время в том же формате, что и MySQL-функция NOW()
?
Текст проблемы:
Есть ли в PHP функция, которая возвращает дату и время в таком же формате, как MySQL-функция NOW()
?
Я знаю, как это сделать с помощью date()
, но меня интересует, есть ли отдельная функция только для этой задачи.
Например, чтобы вернуть:
2009-12-01 00:00:00
5 ответ(ов)
Функция date('Y-m-d H:i:s')
в PHP используется для форматирования даты и времени. Она возвращает текущие дату и время в формате "ГГГГ-ММ-ДД ЧЧ:ММ:СС".
Вот разбор формата:
Y
— четырехзначный год.m
— двухзначный месяц (от 01 до 12).d
— двухзначный день месяца (от 01 до 31).H
— часы в 24-часовом формате (от 00 до 23).i
— минуты (от 00 до 59).s
— секунды (от 00 до 59).
Пример использования:
echo date('Y-m-d H:i:s'); // выводит что-то вроде 2023-10-05 14:32:10
Обратите внимание, что функция date()
использует временную зону, установленную в настройках PHP. Вы можете изменить временную зону с помощью функции date_default_timezone_set()
.
Дополнительную информацию и примеры можно найти в документации PHP.
Ваша функция getDatetimeNow()
работает корректно, но есть несколько моментов, которые можно улучшить или изменить для большей ясности. Вот как она выглядит:
function getDatetimeNow() {
$tz_object = new DateTimeZone('Brazil/East');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format('Y\-m\-d\ h:i:s');
}
Объяснение:
- Таймзона: Вы правильно задаете таймзону с помощью
DateTimeZone
. Однако стоит отметить, что используемая вами таймзона'Brazil/East'
на самом деле не является общепринятой. Обычно используют'America/Sao_Paulo'
для получения времени Бразилии. Рекомендуется использовать именно эту таймзону. Вот как это можно сделать:
$tz_object = new DateTimeZone('America/Sao_Paulo');
- Формат даты: В методе
format()
вы используете обратные слэш-символы (\
). Это не обязательно, так как они не нужны для разделителей в форматеY-m-d h:i:s
. Вы можете упростить код, удалив их:
return $datetime->format('Y-m-d H:i:s');
- Тип времени: Если вы хотите получить время в 24-часовом формате, используйте
H
вместоh
в формате (гдеH
– часы от 00 до 23, аh
– часы от 01 до 12).
Итоговый код:
Вот скорректированный вариант функции с учетом вышеперечисленных замечаний:
function getDatetimeNow() {
$tz_object = new DateTimeZone('America/Sao_Paulo');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format('Y-m-d H:i:s');
}
Таким образом, вы получите корректное время для Бразилии в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
.
Попробуйте использовать следующий код:
date("Y-m-d H:i:s");
Этот код вернёт текущую дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
. Убедитесь, что у вас правильно настроен часовой пояс, если это важно для вашего приложения. Вы можете задать часовой пояс с помощью функции date_default_timezone_set()
. Например:
date_default_timezone_set('Europe/Moscow');
echo date("Y-m-d H:i:s");
Таким образом, вы получите актуальное время для вашего региона.
Вот еще один простой способ, который я нашел удобным для использования:
echo date('c');
// 2015-07-27T00:00:00+02:00
Это дата в формате ISO 8601 (добавлена в PHP 5), которую использует MySQL.
Редактирование
По умолчанию MySQL 5.7 не позволяет использовать временные зоны в формате datetime. Вы можете отключить это ограничение с помощью SQL_MODE=ALLOW_INVALID_DATES
. Более подробную информацию можно найти в ответе здесь: https://stackoverflow.com/a/35944059/2103434. Однако это также означает, что временная зона будет потеряна при сохранении в базу данных!
По умолчанию MySQL использует временную зону системы, и пока PHP использует ту же временную зону, все должно работать корректно. В моем случае это CET / UTC+2.
Это значит, что если я вставлю 2015-07-27T00:00:00+02:00
в базу данных, будет сохранено только 2015-07-27T00:00:00
(но это корректное локальное время!).
Когда я загружу время обратно в PHP:
$importedDate = new \DateTime('2015-07-27T00:00:00');
он автоматически примет временную зону +02:00
, так как это значение по умолчанию. Печать этого значения будет корректной:
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
Чтобы быть в безопасности, всегда используйте UTC на сервере, указывайте это в MySQL и PHP, а затем только преобразовывайте во временную зону пользователя при отображении даты:
date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00
Функция MySQL NOW()
возвращает текущую временную метку. В PHP эквивалентом этого выражения можно использовать следующий код:
$curr_timestamp = date('Y-m-d H:i:s');
Этот код формирует строку с текущей датой и временем в формате "ГГГГ-ММ-ДД ЧЧ:ММ:СС", аналогично тому, как это делает NOW()
в MySQL. Uбедитесь, что настройки часового пояса в PHP установлены правильно, чтобы избежать несоответствий во времени. Вы можете использовать функцию date_default_timezone_set()
для установки часового пояса, если это необходимо.
Как получить день недели по заданной дате?
Как вычислить разницу между двумя датами с помощью PHP?
Как получить расширение файла в PHP?
Как установить конкретную версию пакета с помощью Composer?
Разница между HTTP_HOST и SERVER_NAME в PHP