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.

Danke dir


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.
Johan

Antworten:


239
$timestamp = strtotime('today midnight');

Vielleicht möchten Sie einen Blick auf das Angebot von PHP werfen: http://php.net/datetime


52
@ 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 = new DateTime();
$today->setTime(0,0);

Wenn Sie PHP 5.4 oder höher verwenden, können Sie dies folgendermaßen tun:

$today = (new DateTime())->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.

PHP DateTime-Objekt


14
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.
Christopher K.


7

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

Mögliche Definitionen von "hier" sind unter https://secure.php.net/manual/en/timezones.php aufgeführt


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.

Referenzen: Datum Funktion: http://php.net/manual/en/function.date.php

String To Time: http://us2.php.net/manual/en/function.strtotime.php


Zeitstempel? Das ist nur ein Date.
Wesside

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

1
$timestamp = strtotime('today midnight');

ist das gleiche wie

$timestamp = strtotime('today');

und es ist ein wenig weniger Arbeit auf Ihrem Server.


0

$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.


0

Wenn Sie Carbon verwenden, können Sie Folgendes tun. Sie können dieses Datum auch formatieren, um einen ExpireHTTP-Header festzulegen.

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)

0

Aktualisierte Antwort am 19. April 2020

Einfach können wir das tun:

$today = date('Y-m-d 00:00:00');


-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());


Die Frage bezieht sich auf PHP. Diese Antwort wurde in JavaScript
Electric Coffee
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.