Существует ли функция PHP, которая возвращает дату и время в том же формате, что и функция MySQL NOW()
?
Я знаю, как это сделать с помощью date()
, но я спрашиваю, есть ли функция только для этого.
Например, чтобы вернуть:
2009-12-01 00:00:00
Не только:
date("Y-m-d H:i:s");
date('Y-m-d H:i:s')
Смотрите здесь для более подробной информации: http://pl.php.net/manual/en/function.date.php
Использовать эту функцию:
function getDatetimeNow() {
$tz_object = new DateTimeZone('Brazil/East');
//date_default_timezone_set('Brazil/East');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format('Y\-m\-d\ h:i:s');
}
Короткий ответ
$now = date_create()->format('Y-m-d H:i:s');
Читайте ниже, за долгий ответ.
<ч> <ч> <ч>
Имитация MySQL теперь (функцию) на PHP
Вот список способов в PHP, которые имитируют поддержку функцией now ()`.
// relative date
$now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher
$now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2
$now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!!
$now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher
$now = date('Y-m-d H:i:s'); // works as well, but it's less nice then date_create()
// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,
// and if you try to invoke format() on a FALSE then you'll get a:
// Fatal error: Call to a member function format() on boolean
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);
Я думаю, что date_create()->формат('г-м-д ч:я:ы') - это лучше всего, потому что этот подход позволяет обрабатывать времени/часового пояса манипуляций проще, чем
дата('г-м-д ч:я:ы') и это работает с PHP 5.2.
<ч> MySQL теперь() функция
В функция MySQL, теперь()
получаем значение даты и времени в следующем формате: 'гггг-ММ-ДД чч:мм:СС'
. Смотрите здесь: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now.
Интересен тот факт, что это'ы можно получить формат даты и времени, при выполнении этого запроса: показать переменные как 'д%e_format'
, результат может быть примерно таким:
Variable_name Value
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
Переменными здесь являются только для чтения переменных. Так что вы можете't изменить его.
Теперь, я полагаю, что MySQL () функция получает он'формата S от
datetime_format` переменной.
<ч>
date_create()->формат() против даты()
Благоприятные факты date_create('сейчас')->формат('г-м-д ч:я:ы')
за `дата('г-м-д ч:я:ы') являются:
легче справиться с манипуляциями времени
date_create()
принимает относительный формат даты/времени (например, теперь
, вчера
или +1 день
) см. по этой ссылке, например:
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
даты()` принимает относительный формат даты/времени, а также, как это:
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
$tomorrow = date('Y-m-d H:i:s', (time() + 86400)); // 86400 seconds = 1 day
легче обрабатывать часовые пояса
Когда часовые пояса имеет значения, то использование date_create()->в формате () делает гораздо больше смысла то дате()
потому что дата()
использует часовой пояс по умолчанию, который настраивается в РНР.Ини на дату.директива часовой пояс
. Ссылка: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .
Можно изменить часовой пояс во время выполнения. Пример:
для меня('Азия/Токио');
.
Недостатком этого является то, что она повлияет на все функции даты и времени. Эта проблема не'т существует, если вы используете date_create()->в формате()
в сочетании с timezone_open()
.
РНР поддерживает все основные часовые пояса. Самое смешное, что он даже поддерживает Полярным кругом и в Антарктиде. Вы когда-нибудь слышали о Лонгйир
? Если нет, то Дон'т беспокойтесь, я тоже не знал, пока не прочитал в официальной документации PHP.
$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');
Просмотреть список всех поддерживаемых часовых поясов: http://php.net/manual/en/timezones.php.
о'.о'.стр.
О. О. П. использует полноценные объекты. Поэтому я предпочитаю думать в эту сторону:
// Create a DateTime Object.
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
Затем, чтобы думать таким образом:
// Give me a date time string in format 'Y-m-d H:i:s',
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
Поэтому я бы сказал, что date_create()->в формате () метод является более читабельным для меня то дате()
.
<ч>
date_create() против новый объект datetime()
Благоприятные факты date_create()
за `новый объект datetime () являются:
Пространства имен
Если вы работаете в пространстве имен, и хотите инициализировать объект datetime с нового сайта, то вы должны сделать это так:
namespace my_namespace;
// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();
Нет ничего неправильно с этим, но минус в том, что люди спорадически забываем про слеш. С помощью date_create (функция-конструктор)
вы Don'т придется беспокоиться о пространствах имен.
$dt = date_create(); // in or not in a namespace it works in both situations
<ч>
Пример date_create()->формат()
Я использую этот подход для моих проектов, если мне нужно заполнить массив. Как это:
$array = array(
'name' => 'John',
'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone
'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'),
);
Попробуйте это:
date("Y-m-d H:i:s");
Я искал один и тот же ответ, и я придумал такое решение для РНР 5.3 или более поздней версии:
$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
Функция MySQL теперь()
возвращает текущую метку времени. Единственный способ я нашел для PHP, используя следующий код.
$curr_timestamp = date('Y-m-d H:i:s');
Использовать функцию strftime
:
strftime("%F %T");
%Е
такой же как %г-%м-%д
.
%Т
такой же как %ч:%м:%ы
.
Здесь'ы демо на ideone.
Еще один ответ я нахожу простой в использовании:
echo date('c');
// 2015-07-27T00:00:00+02:00
Это даты ISO 8601 (добавлено в PHP 5) который MySQL использует
В MySQL 5.7 не позволяют поясу в датавремя по умолчанию. Вы можете отключить ошибку SQL_MODE=ALLOW_INVALID_DATES
. Смотрите ответ здесь для больше деталей: https://stackoverflow.com/a/35944059/2103434. Но это также означает, что часовые пояса будут потеряны при сохранении в базу данных!
По умолчанию MySQL использует систему'ы пояс, и так долго, как PHP использует тот же часовой пояс вы должны быть хорошо. В моем случае центральноевропейскому времени / по Гринвичу+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
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
Или вы можете использовать Датавремя
константы:
echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00
Здесь's в список из них:
ATOM = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
COOKIE = "l, d-M-Y H:i:s T" ; // -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 = "Y-m-d\TH:i:sO" ; // -> 2005-08-15T15:52:01+0000
RFC822 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 = "l, d-M-y H:i:s T" ; // -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00
RSS = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
W3C = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
Для отладки, но я предпочитаю покороче (3v4l.org):
echo date('ymd\THisP'); // 180614T120708+02:00
Мне нравится решение опубликовано user1786647, и я'вэ обновил его немного, чтобы изменить часовой пояс, чтобы аргумент функции и добавить дополнительную поддержку для прохождения либо времени Unix или строки datetime использовать для возвращенных метка.
Она также включает резервную и"setTimestamp" и для пользователей, работающих с версией ниже, чем PHP 5.3:
function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
$objTimeZone = new DateTimeZone($strTimeZone);
$objDateTime = new DateTime();
$objDateTime->setTimezone($objTimeZone);
if (!empty($strDateTime)) {
$fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;
if (method_exists($objDateTime, "setTimestamp")) {
$objDateTime->setTimestamp($fltUnixTime);
}
else {
$arrDate = getdate($fltUnixTime);
$objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']);
$objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']);
}
}
return $objDateTime->format("Y-m-d H:i:s");
}
Вы можете использовать функции Date в PHP с правильным форматом в качестве параметра,
echo date("Y-m-d H:i:s");
Нет встроенного PHP теперь()
функция, но вы можете сделать это с помощью дата()`.
Пример
в PHP функция Now() { дата возврата('г-м-д ч:я:ы'); }
Вы можете использовать для меня()
если вы хотите изменить часовой пояс.
В противном случае вы можете использовать углерода - Простое расширение PHP API для даты.
Вы можете использовать класс simplePHP для этого:
echo $date->now();
Этот класс также предоставляет множество полезных методов для дата сложения, вычитания и сравнения. Вы можете Регистрация страница учебники дополнительные примеры.