Como eu faria para obter um timestamp em php para hoje à meia-noite. Digamos que seja segunda-feira às 17h e eu queira o timestamp para segunda-feira (hoje) à meia-noite (12h), o que já aconteceu.
Obrigado
Como eu faria para obter um timestamp em php para hoje à meia-noite. Digamos que seja segunda-feira às 17h e eu queira o timestamp para segunda-feira (hoje) à meia-noite (12h), o que já aconteceu.
Obrigado
Respostas:
$timestamp = strtotime('today midnight');
Você pode querer dar uma olhada no que o PHP tem a oferecer: http://php.net/datetime
$timestamp = strtotime('today');
é meia-noite. Mas pssst, o acima parece mais legal como uma resposta à pergunta;)
strtotime('today+00:00')
.
Eu acho que você deve usar o novo objeto PHP DateTime, pois ele não tem problemas com datas além das restrições de 32 bits que strtotime () tem. Aqui está um exemplo de como você obteria a data de hoje à meia-noite.
$today = new DateTime();
$today->setTime(0,0);
Ou se estiver usando PHP 5.4 ou posterior, você pode fazer desta forma:
$today = (new DateTime())->setTime(0,0);
Em seguida, você pode usar o echo $today->format('Y-m-d');
para obter o formato que deseja como a saída do objeto.
new DateTime('today midnight')
que torna a intenção mais clara (mas isso é obviamente uma questão de gosto).
$today = new DateTime('today')
new Carbon('today midnight')
e usar todas as coisas de Carbono como ->subDays(6)
. Consulte carbon.nesbot.com
Você está tentando calcular a hora do evento celestial mais recente em que o sol passou diretamente abaixo de seus pés, ajustada para as convenções locais de marcar o meio-dia e também potencialmente ajustando para que as pessoas tenham luz do dia suficiente após voltar para casa do trabalho, e para outras considerações políticas.
Assustador, certo? Na verdade, este é um problema comum, mas a resposta completa depende da localização:
$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
As definições potenciais de “aqui” estão listadas em https://secure.php.net/manual/en/timezones.php
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qD
$today_at_midnight = strtotime(date("Ymd"));
deve dar a você o que você procura.
explicação
O que fiz foi usar a função de data do PHP para obter a data de hoje sem nenhuma referência ao tempo e, em seguida, passá-lo para a função 'string to time' que converte uma data e hora em um carimbo de data / hora de época. Se não chegar a hora, assume o primeiro segundo daquele dia.
Referências: Função de data: http://php.net/manual/en/function.date.php
String para o tempo: http://us2.php.net/manual/en/function.strtotime.php
strtotime()
, a mente estava tão focada na função de data. Desculpas.
De forma mais objetiva:
$today = new \DateTimeImmutable('today');
exemplo:
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');
é válido.
Você também pode experimentar
strtotime('12am')
ou strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Ignorei a adição de hoje antes da meia-noite porque o padrão é hoje.
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());