Я хотел бы подчеркнуть, что и вы, и @troelskn отправили один и тот же ответ 3 января 2010 года в 17:08, но он все еще получил на ~ 800 голосов больше. Ваш ответ был, вероятно, на расстоянии нескольких секунд от его. :) Спасибо, что написали в любом случае: D
Александар
9 секунд спустя (отображается при наведении курсора на «ответ» с надписью)
Гжегож Оледзки
110
С версией PHP> = 5.4 DateTime может сделать это: -
хорошая идея обернуть конструктор и правильно отформатировать его.
акме
наконец php начал копировать из delphi и c # :)
Erçin Dedeodelu
1
это может быть приятно, но совсем не отвечает на вопрос, так проще и быстрее это сделать
Asped
8
@Asped Каким образом это не отвечает на вопрос? Это функция PHP, которая «возвращает дату и время в том же формате, что и функция MySQL NOW ()», и это как раз вопрос.
vascowhite
@vascowhite - вопрос был, есть ли определенная функция для этой единственной цели. так что ответ НЕТ. все остальные возможности, перечисленные здесь, могут работать, и ваша тоже хороша, но не помогает, так как парень, спрашивающий, уже знал, как это сделать, но хотел более простую, универсальную функцию, которой у вас нет :)
Asped
34
Используйте эту функцию:
function getDatetimeNow(){
$tz_object =newDateTimeZone('Brazil/East');//date_default_timezone_set('Brazil/East');
$datetime =newDateTime();
$datetime->setTimezone($tz_object);return $datetime->format('Y\-m\-d\ h:i:s');}
Правильно, если вы будете тратить впустую таких персонажей, мы их исчерпаем.
Билл Карвин
4
да мой плохой время () на самом деле не нужно
streetparade
15
8 символов, на самом деле.
Хенрик Эрландссон
52
Принимая во внимание все отходы здесь, я нахожу довольно постыдным, что он использовал двойные кавычки
Оги Гарднер
37
Представьте, что все персонажи напрасно комментируют пустую трата персонажей!
Pwnball
25
Короткий ответ
$now = date_create()->format('Y-m-d H:i:s');
Читайте ниже для длинного ответа.
Мимикрия функции MySQL NOW () в PHP
Вот список способов в PHP, которые имитируют NOW()функцию MySQL .
// 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 =newDateTime('now')->format('Y-m-d H:i:s');// syntax error!!!
$now =(newDateTime('now'))->format('Y-m-d H:i:s');// works in php 5.4 and higher
$now = date('Y-m-d H:i:s');// Slightly higher performance, but less usable for date/time manipulations// 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()->format('Y-m-d H:i:s')это лучший способ, потому что этот подход позволяет вам обрабатывать временные / часовые пояса проще, чем date('Y-m-d H:i:s')он работает, начиная с php 5.2.
Интересным фактом является то, что с помощью этого запроса можно получить формат даты и времени: SHOW VARIABLES LIKE 'd%e_format'результат может быть примерно таким:
Когда часовые пояса материи , то использование date_create()->format()делает гораздо больше смысла , то date()потому , что date()использует часовой пояс по умолчанию , который настраивается в php.iniв date.timezoneдирективе. Ссылка: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .
Можно изменить часовой пояс во время выполнения. Пример:
date_default_timezone_set('Asia/Tokyo');,
Недостатком этого является то, что это повлияет на все функции даты / времени. Эта проблема не существует, если вы используете date_create()->format()в сочетании с timezone_open().
PHP поддерживает основные часовые пояса. Самое смешное, что он поддерживает даже Северный полярный круг и Антарктиду. Вы когда-нибудь слышали о Longyearbyen? Если нет, то не волнуйтесь, я тоже, пока не прочитал официальную документацию по 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()->format()подход более понятен для меня date().
date_create () VS новый DateTime ()
Благоприятные факты date_create()над new 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()функцию конструктора, вам не нужно беспокоиться о пространствах имен.
$dt = date_create();// in or not in a namespace it works in both situations
Пример date_create () -> format ()
Я использую этот подход для своих проектов, если мне нужно заполнить массив. Нравится:
Еще один ответ, который я считаю простым в использовании:
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будет сохранено только (но это правильное местное время!).
Чтобы быть в безопасности, всегда используйте UTC на сервере, укажите его в MySQL и PHP, а затем конвертируйте его только в локаль вашего пользователя при отображении даты:
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 ):
Мне нравится решение, опубликованное user1786647, и я немного обновил его, чтобы изменить часовой пояс на аргумент функции и добавить дополнительную поддержку для передачи либо строки времени Unix, либо даты / времени для использования в возвращенной метке даты.
Он также включает запасной вариант для «setTimestamp» для пользователей, работающих под версией ниже PHP 5.3:
echo now();//2020-03-10 22:10
echo now()->addDay(1);//2020-03-11 22:10
echo now()->addDay(1)->addHour(1);// //2020-03-11 23:10
echo now()->addDay(1)->addHour(1)->addMinute(30);// //2020-03-11 23:40
echo now()->addDay(1)->addHour(1)->addMinute(30)->addSecond(10);// //2020-03-11 23:50//or u can use get method for example
echo now()->addDay(1)->addHour(1)->addMinute(30)->get();// //2020-03-11 23:40
Зачем кому-то нужен целый класс для чего-то, что может быть полностью удовлетворено в одной строке кода?!? Если что-то в этом TLDR имеет ценность, это правильный ответ на неправильный вопрос.
mickmackusa
потому что теперь это объект каждый раз
dılo sürücü
ОП запросил только определенную форматированную строку даты. Ничего больше. Никаких манипуляций с датой и временем. Это правильный ответ на неправильный вопрос.
mickmackusa
я отредактировал код повторить взгляд на код ...
dılo sürücü
Ваше редактирование скопировало предлагаемое решение из 3 из 5 лучших ответов на этой странице. Вы вносите свой вклад в раздувание страниц (избыточное содержание и рекомендации вне области видимости), и это не подходит для Stackoverflow.
Ответы:
Не считая функции даты :
источник
date_default_timezone_set
функциюСмотрите здесь для получения дополнительной информации: http://pl.php.net/manual/en/function.date.php
источник
С версией PHP> = 5.4 DateTime может сделать это: -
Посмотрите, как это работает .
источник
Используйте эту функцию:
источник
Попробуй это:
источник
Короткий ответ
Читайте ниже для длинного ответа.
Мимикрия функции MySQL NOW () в PHP
Вот список способов в PHP, которые имитируют
NOW()
функцию MySQL .Я думаю, что
date_create()->format('Y-m-d H:i:s')
это лучший способ, потому что этот подход позволяет вам обрабатывать временные / часовые пояса проще, чемdate('Y-m-d H:i:s')
он работает, начиная с php 5.2.MySQL NOW () функция
Функция MySQL
NOW()
дает значение DATETIME в следующем формате:'YYYY-MM-DD HH:MM:SS'
. Смотрите здесь: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now .Интересным фактом является то, что с помощью этого запроса можно получить формат даты и времени:
SHOW VARIABLES LIKE 'd%e_format'
результат может быть примерно таким:Переменные здесь являются переменными только для чтения. Так что ты не можешь это изменить.
Я предполагаю, что
NOW()
функция MySQL получает свой формат изdatetime_format
переменной.Преимущества date_create () -> format () вместо date ()
Благоприятные факты
date_create('now')->format('Y-m-d H:i:s')
надdate('Y-m-d H:i:s')
являются:Недостатки date_create () -> format () вместо date ()
Функция
date()
имеет чуть лучшую производительность, чемdate_create()->format()
. См тест теста ниже.Верхний регистр показывает, что
date()
быстрее. Однако, если мы немного изменим тестовый сценарий, результат будет другим. См. ниже:Метод DateTime:
format()
здесь быстрее, чемdate()
.Преимущества date_create () -> format () вместо date () подробно
Продолжайте читать для подробного объяснения.
легче справляться с временными манипуляциями
date_create()
принимает относительный формат даты / времени (напримерnow
,yesterday
или+1 day
), см. эту ссылку , пример:date()
также принимает относительный формат даты / времени, например:легче обрабатывать часовые пояса
Когда часовые пояса материи , то использование
date_create()->format()
делает гораздо больше смысла , тоdate()
потому , чтоdate()
использует часовой пояс по умолчанию , который настраивается вphp.ini
вdate.timezone
директиве. Ссылка: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .Можно изменить часовой пояс во время выполнения. Пример:
date_default_timezone_set('Asia/Tokyo');
,Недостатком этого является то, что это повлияет на все функции даты / времени. Эта проблема не существует, если вы используете
date_create()->format()
в сочетании сtimezone_open()
.PHP поддерживает основные часовые пояса. Самое смешное, что он поддерживает даже Северный полярный круг и Антарктиду. Вы когда-нибудь слышали о
Longyearbyen
? Если нет, то не волнуйтесь, я тоже, пока не прочитал официальную документацию по PHP.См. Список всех поддерживаемых часовых поясов: http://php.net/manual/en/timezones.php .
OOP
ООП использует объекты с полным состоянием. Поэтому я предпочитаю думать так:
Тогда думать так:
Поэтому я бы сказал, что этот
date_create()->format()
подход более понятен для меняdate()
.date_create () VS новый DateTime ()
Благоприятные факты
date_create()
надnew DateTime()
являются:Пространства имен
Если вы работаете в пространстве имен и хотите инициализировать объект DateTime с новым ключевым словом, то вы должны сделать это следующим образом:
В этом нет ничего плохого, но недостатком вышесказанного является то, что люди время от времени забывают об обратном слэше. Используя
date_create()
функцию конструктора, вам не нужно беспокоиться о пространствах имен.Пример date_create () -> format ()
Я использую этот подход для своих проектов, если мне нужно заполнить массив. Нравится:
источник
Я искал тот же ответ, и я нашел это решение для PHP 5.3 или более поздней версии :
источник
Функция MySQL
NOW()
возвращает текущую метку времени. Единственный способ, который я нашел для PHP - это использовать следующий код.источник
Еще один ответ, который я считаю простым в использовании:
Это дата 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,
он автоматически предположит, что это
+02:00
часовой пояс, так как это по умолчанию. Печать это будет правильно снова:Чтобы быть в безопасности, всегда используйте UTC на сервере, укажите его в MySQL и PHP, а затем конвертируйте его только в локаль вашего пользователя при отображении даты:
источник
Используйте
strftime
:%F
так же, как%Y-%m-%d
.%T
так же, как%H:%M:%S
.Вот демо на Ideone.
источник
Или вы можете использовать
DateTime
константы :Вот их список:
Для отладки я предпочитаю более короткий ( 3v4l.org ):
источник
Мне нравится решение, опубликованное user1786647, и я немного обновил его, чтобы изменить часовой пояс на аргумент функции и добавить дополнительную поддержку для передачи либо строки времени Unix, либо даты / времени для использования в возвращенной метке даты.
Он также включает запасной вариант для «setTimestamp» для пользователей, работающих под версией ниже PHP 5.3:
источник
Вы можете использовать функцию даты PHP с правильным форматом в качестве параметра,
источник
Там нет встроенной
now()
функции PHP , но вы можете сделать это с помощьюdate()
.пример
Вы можете использовать,
date_default_timezone_set()
если вам нужно изменить часовой пояс.В противном случае вы можете использовать Carbon - простое расширение PHP API для DateTime.
источник
Если вы хотите получить время сейчас, включая AM / PM
Выводит
2020-05-01 05:45:28 pm
или
Выводит
2020-05-01 05:45:28 PM
источник
вскоре
php advanced теперь класс extra addMinute addYear как таковой addHour и т.д ...
с помощью
источник
Эквивалент PHP
time()
: http://php.net/manual/en/function.time.phpисточник
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).