5

Функция NOW() в PHP

13

Заголовок: Существует ли функция PHP, возвращающая дату и время в том же формате, что и MySQL-функция NOW()?

Текст проблемы:

Есть ли в PHP функция, которая возвращает дату и время в таком же формате, как MySQL-функция NOW()?

Я знаю, как это сделать с помощью date(), но меня интересует, есть ли отдельная функция только для этой задачи.

Например, чтобы вернуть:

2009-12-01 00:00:00

5 ответ(ов)

1

Функция 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.

0

Ваша функция 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');
}

Объяснение:

  1. Таймзона: Вы правильно задаете таймзону с помощью DateTimeZone. Однако стоит отметить, что используемая вами таймзона 'Brazil/East' на самом деле не является общепринятой. Обычно используют 'America/Sao_Paulo' для получения времени Бразилии. Рекомендуется использовать именно эту таймзону. Вот как это можно сделать:
$tz_object = new DateTimeZone('America/Sao_Paulo');
  1. Формат даты: В методе format() вы используете обратные слэш-символы (\). Это не обязательно, так как они не нужны для разделителей в формате Y-m-d h:i:s. Вы можете упростить код, удалив их:
return $datetime->format('Y-m-d H:i:s');
  1. Тип времени: Если вы хотите получить время в 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');
}

Таким образом, вы получите корректное время для Бразилии в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.

0

Попробуйте использовать следующий код:

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");

Таким образом, вы получите актуальное время для вашего региона.

0

Вот еще один простой способ, который я нашел удобным для использования:

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
0

Функция MySQL NOW() возвращает текущую временную метку. В PHP эквивалентом этого выражения можно использовать следующий код:

$curr_timestamp = date('Y-m-d H:i:s');

Этот код формирует строку с текущей датой и временем в формате "ГГГГ-ММ-ДД ЧЧ:ММ:СС", аналогично тому, как это делает NOW() в MySQL. Uбедитесь, что настройки часового пояса в PHP установлены правильно, чтобы избежать несоответствий во времени. Вы можете использовать функцию date_default_timezone_set() для установки часового пояса, если это необходимо.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь