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
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
Antworten:
Nicht neben der Datumsfunktion :
date("Y-m-d H:i:s");
date_default_timezone_set
Funktion verwenden müssen
date('Y-m-d H:i:s')
Weitere Informationen finden Sie hier: http://pl.php.net/manual/en/function.date.php
Mit der PHP-Version> = 5.4 kann DateTime Folgendes tun: -
echo (new \DateTime())->format('Y-m-d H:i:s');
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');
}
Versuche dies:
date("Y-m-d H:i:s");
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.
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_format
Variablen.
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:
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
, yesterday
oder +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.ini
der date.timezone
Direktive 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
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'),
);
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');
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
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:00
in die Datenbank einfüge, 2015-07-27T00:00:00
wird 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:00
Zeitzone angenommen, da dies die Standardeinstellung ist. Das Drucken wird wieder korrekt sein:
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
Oder Sie können DateTime
Konstanten 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
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");
}
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.
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
Das PHP-Äquivalent lautet 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).