NOW () Funktion in PHP


479

Gibt es eine PHP-Funktion, die Datum und Uhrzeit im gleichen Format wie die MySQL-Funktion zurückgibt NOW()?

Ich weiß, wie es geht date(), aber ich frage, ob es nur dafür eine Funktion gibt.

Zum Beispiel, um zurückzukehren:

2009-12-01 00:00:00

2
Gute Frage. Einfach, aber effektiv, um die folgenden dateTime-Lösungen herauszubringen, an die sich jeder Programmierer nur schwer erinnern kann.
Sweet Chilly Philly

Antworten:



143
date('Y-m-d H:i:s')

Weitere Informationen finden Sie hier: http://pl.php.net/manual/en/function.date.php


3
Ich möchte betonen, wie Sie und @troelskn am 3. Januar 2010 um 17:08 Uhr dieselbe Antwort gesendet haben, aber er hat immer noch ~ 800 Upvotes mehr erhalten. Ihre Antwort war wahrscheinlich Sekunden von seiner entfernt. :) Danke, dass du es trotzdem geschrieben hast: D
Aleksandar

9 Sekunden später (sichtbar, wenn Sie den
Mauszeiger mit der

110

Mit der PHP-Version> = 5.4 kann DateTime Folgendes tun: -

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

Sehen Sie, wie es funktioniert .


4
Gute Idee, den Konstruktor zu verpacken und richtig zu formatieren.
Acme

endlich begann php von delphi und c # zu kopieren :)
Erçin Dedeoğlu

1
Das mag nett sein, beantwortet aber die Frage überhaupt nicht. Es ist weder einfacher noch schneller, es auf diese Weise zu tun
Asped

8
@Asped Inwiefern beantwortet es die Frage nicht? Es ist eine PHP-Funktion, die "Datum und Uhrzeit im gleichen Format wie die MySQL-Funktion NOW () zurückgibt", was genau die Frage ist.
vascowhite

@vascowhite - die Frage war, ob es für diesen einen Zweck eine bestimmte Funktion gibt. Die Antwort lautet also NEIN. Alle anderen hier aufgeführten Möglichkeiten funktionieren möglicherweise und Ihre ist auch nett, hilft aber nicht, da der Fragesteller bereits wusste, wie es geht, aber eine einfachere Einzweckfunktion wollte, die Ihre nicht ist :)
Asped

34

Verwenden Sie diese Funktion:

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');
}

25

Versuche dies:

date("Y-m-d H:i:s");

181
Richtig, wenn Sie solche Charaktere verschwenden, werden sie uns ausgehen.
Bill Karwin

4
yep my bad the time () wird eigentlich nicht benötigt
streetparade

15
Eigentlich 8 Zeichen.
Henrik Erlandsson

52
Angesichts all der Verschwendung hier finde ich es ziemlich beschämend, dass er doppelte Anführungszeichen verwendet hat
Augie Gardner,

37
Stellen Sie sich alle Charaktere vor, die damit verschwendet wurden, die Verschwendung von Charakteren zu kommentieren!
Pwnball

25

Kurze Antwort

$now = date_create()->format('Y-m-d H:i:s');

Lesen Sie unten für die lange Antwort.




Die Mimikry der MySQL NOW () -Funktion in PHP

Hier ist eine Liste von Möglichkeiten in PHP, die die MySQL- NOW()Funktion nachahmen .

// 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'); // 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);

Ich denke, das date_create()->format('Y-m-d H:i:s')ist der beste Weg, weil dieser Ansatz es Ihnen ermöglicht, Zeit- / Zeitzonenmanipulationen einfacher zu handhaben als date('Y-m-d H:i:s')und es funktioniert seit PHP 5.2.


MySQL NOW () Funktion

Die MySQL-Funktion NOW()gibt den dateTime-Wert in diesem Format an : 'YYYY-MM-DD HH:MM:SS'. Siehe hier: https://dev.mysql.com/doc/refman/8.0/de/date-and-time-functions.html#function_now .

Eine interessante Tatsache ist, dass es möglich ist, das Datum / Uhrzeit-Format durch Ausführen dieser Abfrage zu erhalten: SHOW VARIABLES LIKE 'd%e_format'Das Ergebnis könnte ungefähr so aussehen:

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

Die Variablen hier oben sind schreibgeschützte Variablen. Sie können es also nicht ändern.

Ich denke, die MySQL- NOW()Funktion erhält ihr Format von der datetime_formatVariablen.




Die Vorteile von date_create () -> format () anstelle von date () summary

Die günstigen Fakten von date_create('now')->format('Y-m-d H:i:s')over date('Y-m-d H:i:s')sind:

  • einfacher mit Zeitmanipulationen umzugehen
  • Zeitzonen einfacher zu handhaben
  • oop

Die Nachteile von date_create () -> format () statt date ()

Die Funktion date()hat eine etwas bessere Leistung als date_create()->format(). Siehe Benchmark-Test unten.

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14

Der Großbuchstabe zeigt, dass dies date()schneller ist. Wenn wir jedoch das Testszenario ein wenig ändern, ist das Ergebnis anders. Siehe unten:

$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
    $a = $dt->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15

Die DateTime-Methode: format()ist hier schneller als date().




Die Vorteile von date_create () -> format () anstelle von date () werden detailliert beschrieben

Lesen Sie weiter für die detaillierte Erklärung.

einfacher mit Zeitmanipulationen umzugehen

date_create()akzeptiert ein relatives Datum / Zeit - Format (wie now, yesterdayoder +1 day) sehen Sie diesen Link , Beispiel:

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

date() akzeptiert auch ein relatives Datums- / Uhrzeitformat wie folgt:

$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

Zeitzonen einfacher zu handhaben

Wenn Zeitzonen wichtig sind, ist die Verwendung von date_create()->format()viel sinnvoller, date()da date()die Standardzeitzone verwendet wird, die in php.inider date.timezoneDirektive konfiguriert ist . Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .

Es ist möglich, die Zeitzone zur Laufzeit zu ändern. Beispiel:

date_default_timezone_set('Asia/Tokyo');.

Der Nachteil davon ist, dass es alle Datums- / Zeitfunktionen beeinflusst. Dieses Problem tritt nicht auf, wenn Sie es date_create()->format()in Kombination mit verwenden timezone_open().

PHP unterstützt wichtige Zeitzonen. Das Lustige ist, dass es sogar den Polarkreis und die Antarktis unterstützt. Hast du jemals davon gehört Longyearbyen? Wenn nicht, dann mach dir keine Sorgen, bis ich die offizielle PHP-Dokumentation gelesen habe.

$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');

Eine Liste aller unterstützten Zeitzonen finden Sie unter: http://php.net/manual/en/timezones.php .

oop

OOP verwendet zustandsreiche Objekte. Deshalb denke ich lieber so:

// 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'); 

Dann so denken:

// 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'));

Daher würde ich sagen, dass der date_create()->format()Ansatz für mich dann besser lesbar ist date().




date_create () VS new DateTime ()

Die günstigen Fakten von date_create()over new DateTime()sind:

  • Namespaces

Namespaces

Wenn Sie in einem Namespace arbeiten und ein DateTime-Objekt mit dem neuen Schlüsselwort initialisieren möchten, müssen Sie dies folgendermaßen tun:

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

Daran ist nichts auszusetzen, aber der Nachteil ist, dass die Leute den Backslash sporadisch vergessen. Mit der date_create()Konstruktorfunktion müssen Sie sich keine Gedanken über Namespaces machen.

$dt = date_create(); // in or not in a namespace it works in both situations




Beispiel für date_create () -> format ()

Ich verwende diesen Ansatz für meine Projekte, wenn ich ein Array füllen muss. So was:

$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'),
);

18

Ich habe nach der gleichen Antwort gesucht und mir diese Lösung für PHP 5.3 oder höher ausgedacht:

$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");

16

Die MySQL-Funktion NOW()gibt den aktuellen Zeitstempel zurück. Der einzige Weg, den ich für PHP gefunden habe, ist die Verwendung des folgenden Codes.

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

16

Eine weitere Antwort finde ich einfach zu bedienen:

echo date('c');

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

Dies ist das ISO 8601-Datum (hinzugefügt in PHP 5), das MySQL verwendet

Bearbeiten

MySQL 5.7 erlaubt standardmäßig keine Zeitzone in datetime. Sie können den Fehler mit deaktivieren SQL_MODE=ALLOW_INVALID_DATES. Weitere Informationen finden Sie in der Antwort hier: https://stackoverflow.com/a/35944059/2103434 . Das bedeutet aber auch, dass die Zeitzone beim Speichern in der Datenbank verloren geht!

Standardmäßig verwendet MySQL die Zeitzone des Systems. Solange PHP dieselbe Zeitzone verwendet , sollten Sie in Ordnung sein. In meinem Fall CET / UTC + 2.

Das heißt, wenn ich 2015-07-27T00:00:00+02:00in die Datenbank einfüge, 2015-07-27T00:00:00wird nur gespeichert (aber das ist die richtige Ortszeit!).

Wenn ich die Zeit wieder in PHP lade,

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

Es wird automatisch die +02:00Zeitzone angenommen, da dies die Standardeinstellung ist. Das Drucken wird wieder korrekt sein:

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

Verwenden Sie aus Sicherheitsgründen immer UTC auf dem Server, geben Sie es in MySQL und PHP an und konvertieren Sie es dann nur in das Gebietsschema Ihres Benutzers, wenn Sie das Datum anzeigen:

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


11

Oder Sie können DateTimeKonstanten verwenden :

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

Hier ist die Liste von ihnen:

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

Zum Debuggen bevorzuge ich allerdings eine kürzere ( 3v4l.org ):

echo date('ymd\THisP'); // 180614T120708+02:00

6

Ich mag die von user1786647 veröffentlichte Lösung und habe sie ein wenig aktualisiert, um die Zeitzone in ein Funktionsargument zu ändern und optionale Unterstützung für die Übergabe einer Unix-Zeit- oder Datums- / Uhrzeitzeichenfolge hinzuzufügen, die für den zurückgegebenen Datenstempel verwendet werden soll.

Es enthält auch einen Fallback für "setTimestamp" für Benutzer, die eine niedrigere Version als PHP 5.3 ausführen:

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

6

Sie können die PHP-Datumsfunktion mit dem richtigen Format als Parameter verwenden.

echo date("Y-m-d H:i:s");

1

Es gibt keine eingebaute PHP- now()Funktion, aber Sie können dies mit tun date().

Beispiel

function now() {
    return date('Y-m-d H:i:s');
}

Sie können verwenden, date_default_timezone_set()wenn Sie die Zeitzone ändern müssen.

Andernfalls können Sie Carbon verwenden - eine einfache PHP-API-Erweiterung für DateTime.


0

Wenn Sie jetzt Zeit bekommen möchten, einschließlich AM / PM

<?php 
    $time_now = date("Y-m-d h:i:s a");
    echo $time_now;
?>

Es gibt aus 2020-05-01 05:45:28 pm

oder

<?php 
    $time_now = date("Y-m-d h:i:s A");
    echo $time_now;
?>

Es gibt aus 2020-05-01 05:45:28 PM


-1

in Kürze

echo date('Y-m-d H:i:s');

PHP Advanced jetzt Klasse extra addMinute addYear als solche addHour etc ...

<?php /** @noinspection PhpUnhandledExceptionInspection */

/**
 * Class Now
 * @author  dılo sürücü <berxudar@gmail.com>
 */
class Now
{

    /**
     * @var DateTime
     */
    private $dateTime;

    /**
     * Now constructor.
     * @throws Exception
     */
    public function __construct()
    {
        $this->dateTime = new DateTime('now');
    }


    /**
     * @param int $year
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addYear(int $year): self
    {
        $this->dateTime->add(new DateInterval('P' . $year . 'Y'));

        return $this;
    }

    /**
     * @noinspection PhpUnused
     * @param int $month
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addMonth(int $month):self 
    {
        $this->dateTime->add(new DateInterval('P' . $month . 'M'));

        return $this;
    }

    /**
     * @param int $day
     * @return $this
     * @throws Exception
     */
    public function addDay(int $day): self
    {
        $this->dateTime->add(new DateInterval('P' . $day . 'D'));
        return $this;
    }

    /**
     * @noinspection PhpUnused
     * @param int $week
     * @return $this
     * @throws Exception
     */
    public function addWeek(int $week): self
    {
        return $this->addDay($week * 7);
    }

    /**
     * @noinspection PhpUnused
     * @param int $second
     * @return $this
     * @throws Exception
     */
    public function addSecond(int $second): self
    {
        $this->dateTime->add(new DateInterval('PT' . $second . 'S'));
        return $this;
    }

    /**
     * @param int $minute
     * @return $this
     * @throws Exception
     */
    public function addMinute(int $minute): self
    {
        $this->dateTime->add(new DateInterval('PT' . $minute . 'M'));
        return $this;
    }

    /**
     * @param int $hour
     * @return $this
     * @throws Exception
     */
    public function addHour(int $hour): self
    {
        $this->dateTime->add(new DateInterval('PT' . $hour . 'H'));
        return $this;
    }


    /**
     * @return string
     */
    public function get(): string
    {
        return $this->dateTime->format('Y-m-d H:i:s');
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->get();
    }

}


/**
 * @return Now
 * @throws Exception
 */
function now()
{
    return new Now();

}




mit

  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

Warum sollte jemand eine ganze Klasse für etwas brauchen, das in einer Codezeile vollständig erfüllt werden kann?!? Wenn etwas in dieser TLDR von Wert ist, ist es die richtige Antwort auf die falsche Frage.
Mickmackusa

denn jetzt ist jedes
mal

Das OP hat nur nach einer bestimmten formatierten Datumszeichenfolge gefragt. Nichts mehr. Keine Datums- / Zeitmanipulationen. Dies ist die richtige Antwort auf die falsche Frage.
Mickmackusa

ı bearbeiteter Code wiederholen Blick auf den Code ...
dılo sürücü

Ihre Bearbeitung hat die vorgeschlagene Lösung aus 3 der 5 wichtigsten Antworten auf dieser Seite kopiert. Sie tragen zum Aufblähen von Seiten bei (redundanter Inhalt und Ratschläge außerhalb des Gültigkeitsbereichs), und dies ist nicht gut für Stackoverflow.
mickmackusa

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.