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
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 =newDateTimeZone('Brazil/East');//date_default_timezone_set('Brazil/East');
$datetime =newDateTime();
$datetime->setTimezone($tz_object);return $datetime->format('Y\-m\-d\ h:i:s');}
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 =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);
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.
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:
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.
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:
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!).
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:
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 ):
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:
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.
Antworten:
Nicht neben der Datumsfunktion :
quelle
date_default_timezone_set
Funktion verwenden müssenWeitere Informationen finden Sie hier: http://pl.php.net/manual/en/function.date.php
quelle
Mit der PHP-Version> = 5.4 kann DateTime Folgendes tun: -
Sehen Sie, wie es funktioniert .
quelle
Verwenden Sie diese Funktion:
quelle
Versuche dies:
quelle
Kurze Antwort
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 .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 alsdate('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: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 derdatetime_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')
overdate('Y-m-d H:i:s')
sind:Die Nachteile von date_create () -> format () statt date ()
Die Funktion
date()
hat eine etwas bessere Leistung alsdate_create()->format()
. Siehe Benchmark-Test unten.Der Großbuchstabe zeigt, dass dies
date()
schneller ist. Wenn wir jedoch das Testszenario ein wenig ändern, ist das Ergebnis anders. Siehe unten:Die DateTime-Methode:
format()
ist hier schneller alsdate()
.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 (wienow
,yesterday
oder+1 day
) sehen Sie diesen Link , Beispiel:date()
akzeptiert auch ein relatives Datums- / Uhrzeitformat wie folgt:Zeitzonen einfacher zu handhaben
Wenn Zeitzonen wichtig sind, ist die Verwendung von
date_create()->format()
viel sinnvoller,date()
dadate()
die Standardzeitzone verwendet wird, die inphp.ini
derdate.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 verwendentimezone_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.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:
Dann so denken:
Daher würde ich sagen, dass der
date_create()->format()
Ansatz für mich dann besser lesbar istdate()
.date_create () VS new DateTime ()
Die günstigen Fakten von
date_create()
overnew 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:
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.Beispiel für date_create () -> format ()
Ich verwende diesen Ansatz für meine Projekte, wenn ich ein Array füllen muss. So was:
quelle
Ich habe nach der gleichen Antwort gesucht und mir diese Lösung für PHP 5.3 oder höher ausgedacht:
quelle
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.quelle
Eine weitere Antwort finde ich einfach zu bedienen:
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: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,
Es wird automatisch die
+02:00
Zeitzone angenommen, da dies die Standardeinstellung ist. Das Drucken wird wieder korrekt sein: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:
quelle
Verwendung
strftime
:%F
ist das gleiche wie%Y-%m-%d
.%T
ist das gleiche wie%H:%M:%S
.Hier ist eine Demo zu ideone.
quelle
Oder Sie können
DateTime
Konstanten verwenden :Hier ist die Liste von ihnen:
Zum Debuggen bevorzuge ich allerdings eine kürzere ( 3v4l.org ):
quelle
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:
quelle
Sie können die PHP-Datumsfunktion mit dem richtigen Format als Parameter verwenden.
quelle
Es gibt keine eingebaute PHP-
now()
Funktion, aber Sie können dies mit tundate()
.Beispiel
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.
quelle
Wenn Sie jetzt Zeit bekommen möchten, einschließlich AM / PM
Es gibt aus
2020-05-01 05:45:28 pm
oder
Es gibt aus
2020-05-01 05:45:28 PM
quelle
in Kürze
PHP Advanced jetzt Klasse extra addMinute addYear als solche addHour etc ...
mit
quelle
Das PHP-Äquivalent lautet
time()
: http://php.net/manual/en/function.time.phpquelle
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).