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
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
Risposte:
$timestamp = strtotime('today midnight');
Potresti voler dare un'occhiata a cosa ha da offrire PHP: http://php.net/datetime
$timestamp = strtotime('today');
è mezzanotte. Ma pssst quella sopra sembra più interessante come risposta alla domanda;)
strtotime('today+00:00')
.
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.
new DateTime('today midnight')
che rende l'intenzione più chiara (ma questa è ovviamente una questione di gusti).
$today = new DateTime('today')
new Carbon('today midnight')
e poi puoi usare tutte le cose del carbonio come ->subDays(6)
. Vedi carbon.nesbot.com
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
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qD
$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
strtotime()
, la mente era così concentrata sulla funzione data. Scuse.
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
$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.
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());