Einen Zeitstempel für heute um Mitternacht bekommen?
123
Wie würde ich heute um Mitternacht einen Zeitstempel in PHP bekommen? Angenommen, es ist Montag, 17 Uhr, und ich möchte den Zeitstempel für Montag (heute) um Mitternacht (12 Uhr), was bereits geschehen ist.
Mitternacht ist weder morgens noch abends. Auch technisch existiert kein Zeitstempel für Mitternacht.
hakre
16
@akre Ich bin nicht einverstanden mit dir. Mitternacht ist morgens und unabhängig vom Format eines Zeitstempels gibt es einen Wert für Mitternacht.
G-Nugget
1
wenn 00:00:00 heute oder morgen berücksichtigt. Die heutige Mitternacht liegt technisch gesehen fast immer hinter uns. Sie wollen mehr oder weniger 23:59:59 von "heute Abend" oder 00:00:00 "Mitternacht von heute, was morgen ist".
Wesside
5
Eine Zeit von 00:00:00 wäre die heutige Mitternacht, da in wie viel Zeit es dauert, bis die bereits eingetretene 00:00:00 erreicht ist. wo als 23:59:59 wäre heute Nacht. Wenn Sie heute sprechen. Mitternacht ist AM.
Nazca
4
00:00 ist Mitternacht am Anfang eines Tages, 24:00 ist Mitternacht am Ende eines Tages. Der Einfachheit halber überspringen die meisten Digitaluhren jedoch 24:00 Uhr und erklären, dass Mitternacht der Beginn eines neuen Tages ist. Das heißt, der 8. Februar 24:00 und der 9. Februar 00:00 ist in der Praxis der gleiche Zeitpunkt.
@ SamHuckaby: Es ist noch einfacher: Es $timestamp = strtotime('today');ist Mitternacht. Aber pssst das obige sieht als Antwort auf die Frage cooler aus;)
hakre
Ich muss heute anfangen und heute um Mitternacht. Wie finde ich den Start von heute? Ich meine für 00:00:00
Happy Coder
3
@AlwinAugustin: Sie sollten in Betracht ziehen, Ihren Wortlaut zu unterscheiden. Mitternacht ist technisch gesehen zwischen zwei Tagen. Es gibt also etwas "heute nicht mehr". Außerdem: Midgnight von heute (per Definition) ist (kurz vor) der Beginn von heute. Du meinst wahrscheinlich die nächste Mitternacht nach dem heutigen Mittag .
hakre
Ja, eigentlich brauche ich 00:00:00 von heute und 23:59:59 von heute
Happy Coder
2
Denken Sie daran, dass dies die Mitternacht der Zeitzone Ihres PHP-Servers erzeugt, nicht UTC + 0 ! Um UTC + 0 zu erhalten, können Sie verwenden strtotime('today+00:00').
Mae
73
Ich denke, dass Sie das neue PHP DateTime-Objekt verwenden sollten, da es keine Probleme mit Datumsangaben gibt, die über die 32-Bit-Einschränkungen von strtotime () hinausgehen. Hier ist ein Beispiel, wie Sie das heutige Datum um Mitternacht erhalten würden.
$today =newDateTime();
$today->setTime(0,0);
Wenn Sie PHP 5.4 oder höher verwenden, können Sie dies folgendermaßen tun:
$today =(newDateTime())->setTime(0,0);
Dann können Sie das verwenden echo $today->format('Y-m-d');, um das Format zu erhalten, in dem Ihr Objekt ausgegeben werden soll.
Ich bevorzuge auch die Verwendung des neuen DateTime-Objekts. Wenn Sie diese Antwort mit @ hakr's kombinieren, erhalten Sie : new DateTime('today midnight'), was die Absicht klarer macht (aber das ist natürlich Geschmackssache).
Martijn
1
Ich mache ORM SQL-Arbeit und musste das DateTime-Objekt für Vergleiche verwenden. Genau das habe ich gesucht. +1
NobleUplift
$today = new DateTime('today')
Kann
Auch nützlich, wenn Sie Carbon verwenden, das von DateTime erbt. So können Sie auch tun new Carbon('today midnight')und dann können Sie alle Carbon-Sachen wie verwenden ->subDays(6). Siehe carbon.nesbot.com
Christopher K.
In Bezug auf die 32-Bit-Beschränkung: Im PHP-Dokument für strtotime heißt es : "Für 64-Bit-Versionen von PHP ist der gültige Bereich eines Zeitstempels praktisch unendlich, da 64 Bit ungefähr 293 Milliarden Jahre in beide Richtungen darstellen können." Es gilt also nur für 32bit PHP.
Sie möchten die Zeit des letzten himmlischen Ereignisses berechnen, bei dem die Sonne direkt unter Ihren Füßen vorbeigegangen ist, angepasst an die örtlichen Konventionen zur Markierung des Hochmittags und möglicherweise auch so, dass die Menschen nach der Rückkehr von der Arbeit genügend Tageslicht übrig haben andere politische Überlegungen.
Entmutigend, oder? Eigentlich ist dies ein häufiges Problem, aber die vollständige Antwort ist ortsabhängig:
$zone =new \DateTimeZone('America/New_York');// Or your own definition of “here”
$todayStart =new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Wie strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre
5
$today_at_midnight = strtotime(date("Ymd"));
sollte dir geben, wonach du suchst.
Erläuterung
Ich habe die Datumsfunktion von PHP verwendet, um das heutige Datum ohne Zeitangaben abzurufen, und es dann an die Funktion "String to Time" übergeben, die ein Datum und eine Uhrzeit in einen Epochenzeitstempel konvertiert. Wenn es keine Zeit bekommt, nimmt es die erste Sekunde dieses Tages an.
Gibt es ein bestimmtes Format, nach dem das OP gefragt hat? In diesem Fall würde ich meinen Beitrag gerne so ändern, dass er jedes gewünschte Format zurückgibt.
SamHuckaby
völlig übersehen strtotime(), war der Geist so auf die Datumsfunktion konzentriert. Entschuldigung.
Wesside
2
In mehr Objekt Weise:
$today =new \DateTimeImmutable('today');
Beispiel:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');// will output: 2019-05-16 00:00:00
und:
echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');// will output: 2019-05-16 14:00:35
$midnight = strtotime('midnight');ist gültig Sie können auch ausprobieren
strtotime('12am')oder strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Ich habe das Hinzufügen heute vor Mitternacht übersprungen, da die Standardeinstellung heute ist.
Antworten:
Vielleicht möchten Sie einen Blick auf das Angebot von PHP werfen: http://php.net/datetime
quelle
$timestamp = strtotime('today');
ist Mitternacht. Aber pssst das obige sieht als Antwort auf die Frage cooler aus;)strtotime('today+00:00')
.Ich denke, dass Sie das neue PHP DateTime-Objekt verwenden sollten, da es keine Probleme mit Datumsangaben gibt, die über die 32-Bit-Einschränkungen von strtotime () hinausgehen. Hier ist ein Beispiel, wie Sie das heutige Datum um Mitternacht erhalten würden.
Wenn Sie PHP 5.4 oder höher verwenden, können Sie dies folgendermaßen tun:
Dann können Sie das verwenden
echo $today->format('Y-m-d');
, um das Format zu erhalten, in dem Ihr Objekt ausgegeben werden soll.PHP DateTime-Objekt
quelle
new DateTime('today midnight')
, was die Absicht klarer macht (aber das ist natürlich Geschmackssache).$today = new DateTime('today')
new Carbon('today midnight')
und dann können Sie alle Carbon-Sachen wie verwenden->subDays(6)
. Siehe carbon.nesbot.comHeute um Mitternacht. Einfach.
quelle
Sie möchten die Zeit des letzten himmlischen Ereignisses berechnen, bei dem die Sonne direkt unter Ihren Füßen vorbeigegangen ist, angepasst an die örtlichen Konventionen zur Markierung des Hochmittags und möglicherweise auch so, dass die Menschen nach der Rückkehr von der Arbeit genügend Tageslicht übrig haben andere politische Überlegungen.
Entmutigend, oder? Eigentlich ist dies ein häufiges Problem, aber die vollständige Antwort ist ortsabhängig:
Mögliche Definitionen von "hier" sind unter https://secure.php.net/manual/en/timezones.php aufgeführt
quelle
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDsollte dir geben, wonach du suchst.
Erläuterung
Ich habe die Datumsfunktion von PHP verwendet, um das heutige Datum ohne Zeitangaben abzurufen, und es dann an die Funktion "String to Time" übergeben, die ein Datum und eine Uhrzeit in einen Epochenzeitstempel konvertiert. Wenn es keine Zeit bekommt, nimmt es die erste Sekunde dieses Tages an.
Referenzen: Datum Funktion: http://php.net/manual/en/function.date.php
String To Time: http://us2.php.net/manual/en/function.strtotime.php
quelle
strtotime()
, war der Geist so auf die Datumsfunktion konzentriert. Entschuldigung.In mehr Objekt Weise:
Beispiel:
und:
quelle
ist das gleiche wie
und es ist ein wenig weniger Arbeit auf Ihrem Server.
quelle
$midnight = strtotime('midnight');
ist gültigSie können auch ausprobieren
strtotime('12am')
oderstrtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Ich habe das Hinzufügen heute vor Mitternacht übersprungen, da die Standardeinstellung heute ist.quelle
Wenn Sie Carbon verwenden, können Sie Folgendes tun. Sie können dieses Datum auch formatieren, um einen
Expire
HTTP-Header festzulegen.quelle
Aktualisierte Antwort am 19. April 2020
Einfach können wir das tun:
$today = date('Y-m-d 00:00:00');
quelle
quelle