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_setFunktion 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_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:
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
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: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
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 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
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).