Funkcja NOW () w PHP

Czy istnieje funkcja PHP, która zwraca datę i czas w tym samym formacie, Co funkcja MySQL NOW()?

Wiem, jak to zrobić używając date(), ale pytam, czy istnieje funkcja tylko do tego.

Na przykład, aby zwrócić:

2009-12-01 00:00:00
Author: vaxquis, 2010-01-03

14 answers

Poza Tym:

date("Y-m-d H:i:s")
 851
Author: troelskn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-10 14:23:17
date('Y-m-d H:i:s')

Zobacz tutaj, aby uzyskać więcej szczegółów: http://pl.php.net/manual/en/function.date.php

 124
Author: hsz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-10 14:23:52

Z wersją PHP > = 5.4 DateTime może to zrobić:-

echo (new \DateTime())->format('Y-m-d H:i:s');

Zobacz, jak działa .

 90
Author: vascowhite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-29 10:00:25

Użyj tej funkcji:

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');
}
 29
Author: user1786647,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 18:15:38

Spróbuj tego:

date("Y-m-d H:i:s");
 23
Author: streetparade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-10 14:23:43

Funkcja MySQL NOW() zwraca bieżący znacznik czasu. Jedynym sposobem, jaki znalazłem dla PHP jest użycie poniższego kodu.

$curr_timestamp = date('Y-m-d H:i:s');
 14
Author: Shriganesh Shintre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 03:57:08

Mimikry w PHP

Do naśladowania funkcji MySQL NOW() W PHP można użyć date_create()->format('Y-m-d H:i:s'). Takie podejście pozwala łatwiej obsługiwać manipulacje strefą czasową niż date('Y-m-d H:i:s'). Jest bardziej czytelny i działa od php 5.2.

$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()

To działa, ponieważ funkcja MySQL NOW() podaje wartość dateTime w tym formacie: 'YYYY-MM-DD HH:MM:SS'. Zobacz tutaj: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now . Ciekawostką jest to, że możliwe jest uzyskanie formatu datetime poprzez uruchomienie tego zapytania: SHOW VARIABLES LIKE 'd%e_format', wynik może być mniej więcej taki:

Variable_name     Value     
date_format       %Y-%m-%d
datetime_format   %Y-%m-%d %H:%i:%

Tutaj zmienne są zmiennymi tylko do odczytu. Więc nie możesz tego zmienić. Domyślam się, że funkcja MySQL NOW() pobiera format ze zmiennej datetime_format.

Date_create () - > format () VS Data()

Korzystne fakty date_create('now')->format('Y-m-d H:i:s') nad date('Y-m-d H:i:s') to:

  • łatwiejsze manipulowanie czasem
  • łatwiejszy w obsłudze timezones
  • więcej O. O. P.

Łatwiejsze manipulowanie czasem

date_create() akceptuje względny format daty/czasu (jak now, yesterday lub +1 day) patrz ten link , przykład:

$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

date() przyjmuje również względny format daty/czasu, jak to:

$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

Łatwiejsza obsługa stref czasowych

Gdy strefy czasowe mają znaczenie, użycie date_create()->format() mA o wiele większy sens niż date(), ponieważ date() używa domyślnego Strefa czasowa skonfigurowana w php.ini w dyrektywie date.timezone. (link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone ). istnieje możliwość zmiany strefy czasowej np. date_default_timezone_set('Asia/Tokyo');. Ale minusem tego jest to, że wpłynie to na wszystkie funkcje daty/czasu. Ten problem nie istnieje, jeśli używasz date_create()->format() w połączeniu z timezone_open().

Zobacz listę wszystkich obsługiwanych stref czasowych: http://php.net/manual/en/timezones.php . najśmieszniejsze jest to, że nawet zasiedla koło podbiegunowe i Antarktydę.

Więcej O. O. P.

O. O. P. używa obiektu state-full. Więc wolę myśleć w ten sposób:

Create a DateTime Object. Use the DateTime that applies for tomorrow. Give me the datetime in format 'Y-m-d H:i:s'

Potem myśleć w ten sposób:

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.

Dlatego powiedziałbym, że podejście date_create()->format() jest dla mnie bardziej czytelne niż date().

Przykład date_create () - > format()

Używam tego podejścia do moich projektów, jeśli muszę wypełnić tablicę. Jak to:

$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'),
);
 14
Author: Julian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 09:02:24

Szukałem tej samej odpowiedzi i wymyśliłem to rozwiązanie dla PHP 5.3 lub później:

$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
 13
Author: santi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:41:35

Użycie strftime:

strftime("%F %T");
  • %F jest tym samym co %Y-%m-%d.

  • %T jest tym samym co %H:%M:%S.

Oto demo na ideone.

 13
Author: Danny Beckett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-06 14:39:41

Jeszcze jedna odpowiedź uważam za łatwą w użyciu:

echo date('c'); 

// 2015-07-27T00:00:00+02:00

To jest Data ISO 8601 (dodana w PHP 5) której używa MySQL

Edit

MySQL 5.7 domyślnie nie zezwala na strefę czasową w datetime. Możesz wyłączyć błąd za pomocą SQL_MODE=ALLOW_INVALID_DATES, Zobacz odpowiedź tutaj, aby uzyskać więcej szczegółów: https://stackoverflow.com/a/35944059/2103434 ale to również oznacza, że strefa czasowa zostanie utracona podczas zapisywania do bazy danych!

Domyślnie MySQL używa strefy czasowej systemu, i tak długo, jak php używa tej samej strefy czasowej, powinno być w porządku. W moim przypadku CET / UTC+2.

Oznacza to, że jeśli wstawię 2015-07-27T00:00:00+02:00 do bazy danych, tylko 2015-07-27T00:00:00 będą przechowywane (ale to jest właściwy czas lokalny!).

Kiedy Ładuję czas z powrotem do php,

$importedDate = new \DateTime('2015-07-27T00:00:00')

Automatycznie zakłada, że jest to strefa czasowa +02:00, ponieważ jest domyślna. Wydrukowanie tego ponownie będzie poprawne:

echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

Dla bezpieczeństwa Zawsze używaj UTC na serwerze, określ go w MySQL i PHP, a następnie przekonwertuj go tylko do ustawień regionalnych użytkowników podczas wyświetlania daty:

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
 12
Author: Richard87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 08:41:38

Lub możesz użyć DateTime stałe :

echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00

Oto ich lista:

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

Do debugowania wolę jednak krótszy ( 3v4l.org):

echo date('ymd\THisP'); // 180614T120708+02:00
 7
Author: CPHPython,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 10:03:00

Podoba mi się rozwiązanie opublikowane przez user1786647, zaktualizowałem go trochę, aby zmienić strefę czasową na argument funkcji i dodać opcjonalne wsparcie dla przekazywania czasu Unix lub łańcucha datetime, aby użyć dla zwracanego datestamp.

Zawiera również opcję "setTimestamp" dla użytkowników korzystających z wersji niższej niż 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");
}
 4
Author: Seth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:39:16

Możesz użyć funkcji daty php z prawidłowym formatem jako parametru,

echo date("Y-m-d H:i:s");
 4
Author: Som,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 18:53:28

Możesz użyć klasy simplePHP, aby to zrobić:

echo $date->now();

Ta klasa zawiera również wiele użytecznych metod dodawania, odejmowania i porównywania dat. Możesz sprawdzić tutoriale Strona więcej przykładów.

 -2
Author: isa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-11 08:42:50