Ottenere un timestamp per oggi a mezzanotte?


123

Come dovrei fare per ottenere un timestamp in php per oggi a mezzanotte. Diciamo che è lunedì alle 17:00 e voglio il timestamp per lunedì (oggi) a mezzanotte (12:00) che è già accaduto.

Grazie


La mezzanotte non è né am né pm. Inoltre, tecnicamente, non esiste alcun timestamp per la mezzanotte.
hakre

16
@hakre Non sono d'accordo con te. La mezzanotte è am e qualunque sia il formato in cui è presente un timestamp, esiste un valore per mezzanotte.
G-Nugget

1
se 00:00:00 considerato oggi o domani. La mezzanotte di oggi è dietro di noi, quasi sempre, tecnicamente. Vuoi le 23:59:59 di "stasera" o le 00:00:00 "mezzanotte di oggi, che è domani", più o meno.
mercoledì

5
un'ora di 00:00:00 sarebbe la mezzanotte di oggi come per quanto tempo ci vuole per arrivare alle 00:00:00 che è già successo. dove le 23:59:59 sarebbero stasera. Se parli in termini di oggi. La mezzanotte è AM.
Nazca

4
00:00 è mezzanotte all'inizio di un giorno, 24:00 è mezzanotte alla fine di una giornata. Per semplicità, tuttavia, la maggior parte degli orologi digitali salta le 24:00, dichiarando che la mezzanotte è l'inizio di un nuovo giorno. Vale a dire l'8 febbraio 24:00 e il 9 febbraio 00:00 è in pratica lo stesso momento.
Johan

Risposte:


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

Potresti voler dare un'occhiata a cosa ha da offrire PHP: http://php.net/datetime


52
@SamHuckaby: è ancora più facile: $timestamp = strtotime('today');è mezzanotte. Ma pssst quella sopra sembra più interessante come risposta alla domanda;)
hakre

In realtà ho bisogno di iniziare oggi e mezzanotte di oggi. Come posso trovare l'inizio di oggi intendo per 00:00:00
Happy Coder

3
@ AlwinAugustin: dovresti considerare di differire la tua formulazione. La mezzanotte è tecnicamente tra due giorni. Quindi c'è un po '"non più oggi". Inoltre: Midgnight di oggi (per definizione) è (subito prima) l'inizio di oggi. Probabilmente intendi la prossima mezzanotte dopo oggi mezzogiorno .
hakre

sì, in realtà ciò di cui ho bisogno sono le 00:00:00 di oggi e le 23:59:59 di oggi
Happy Coder

2
Tieni presente che questo produrrà la mezzanotte del fuso orario del tuo server PHP, non UTC + 0 ! Per ottenere UTC + 0 puoi usare strtotime('today+00:00').
mae

73

Penso che dovresti usare il nuovo oggetto PHP DateTime in quanto non ha problemi a fare date oltre le restrizioni a 32 bit di strtotime (). Ecco un esempio di come potresti ottenere la data odierna a mezzanotte.

$today = new DateTime();
$today->setTime(0,0);

Oppure, se stai usando PHP 5.4 o successivo, puoi farlo in questo modo:

$today = (new DateTime())->setTime(0,0);

Quindi puoi usare echo $today->format('Y-m-d');per ottenere il formato in cui desideri l'output dell'oggetto.

Oggetto DateTime PHP


14
Preferisco anche usare il nuovo oggetto DateTime. Se combini questa risposta con @ hakr ottieni:, il new DateTime('today midnight')che rende l'intenzione più chiara (ma questa è ovviamente una questione di gusti).
Martijn

1
Sto eseguendo il lavoro ORM SQL e ho dovuto utilizzare l'oggetto DateTime per i confronti. Questo e 'esattamente quello che stavo cercando. +1
NobleUplift

Può essere$today = new DateTime('today')
ProgZi

Utile anche se stai usando Carbon, che eredita da DateTime. Quindi, puoi anche farlo new Carbon('today midnight')e poi puoi usare tutte le cose del carbonio come ->subDays(6). Vedi carbon.nesbot.com
Christopher K.

Per quanto riguarda la restrizione a 32 bit: Il documento PHP per strtotime afferma : "Per le versioni a 64 bit di PHP, l'intervallo valido di un timestamp è effettivamente infinito, poiché 64 bit possono rappresentare circa 293 miliardi di anni in entrambe le direzioni." Quindi si applica solo a 32 bit php.
Christopher K.

19

Oggi a mezzanotte. Facile.

$stamp = mktime(0, 0, 0);

7

Stai cercando di calcolare l'ora dell'evento celeste più recente in cui il sole è passato direttamente sotto i tuoi piedi, adattato alle convenzioni locali di segnare il mezzogiorno e anche potenzialmente adattato in modo che le persone abbiano abbastanza luce diurna rimasta dopo il ritorno a casa dal lavoro e per altre considerazioni politiche.

Scoraggiante, vero? In realtà questo è un problema comune, ma la risposta completa dipende dalla posizione:

$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();

Le potenziali definizioni di "qui" sono elencate su https://secure.php.net/manual/en/timezones.php


Come strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre

5
$today_at_midnight = strtotime(date("Ymd"));

dovrebbe darti quello che cerchi.

spiegazione

Quello che ho fatto è stato utilizzare la funzione data di PHP per ottenere la data odierna senza alcun riferimento all'ora, quindi passarla alla funzione "string to time" che converte una data e un'ora in un timestamp dell'epoca. Se non ottiene un'ora, presuppone il primo secondo di quel giorno.

Riferimenti: Funzione data: http://php.net/manual/en/function.date.php

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


timestamp? È solo un appuntamento.
mercoledì

Esiste un formato particolare richiesto dall'OP? In tal caso, sarei felice di modificare il mio post per restituire il formato desiderato.
SamHuckaby

completamente trascurato strtotime(), la mente era così concentrata sulla funzione data. Scuse.
mercoledì

2

In modo più oggettivo:

$today = new \DateTimeImmutable('today');

esempio:

 echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00

e:

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

equivale a

$timestamp = strtotime('today');

ed è un po 'meno lavoro sul tuo server.


0

$midnight = strtotime('midnight');è valido
Puoi anche provare strtotime('12am')o strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Ho saltato l'aggiunta oggi prima di mezzanotte perché l'impostazione predefinita è oggi.


0

Se stai usando Carbon puoi fare quanto segue. Puoi anche formattare questa data per impostare Expireun'intestazione HTTP.

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

0

Risposta aggiornata il 19 aprile 2020

Semplicemente possiamo farlo:

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


La domanda riguarda PHP. Questa risposta è scritta in JavaScript
Electric Coffee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.