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.
Meia-noite não é da manhã nem da tarde. Além disso, tecnicamente, não existe nenhum carimbo de data / hora para meia-noite.
hakre
16
@hakre eu discordo de você. Meia-noite é am e qualquer que seja o formato do carimbo de data / hora, há um valor para meia-noite.
G-Nugget
1
se 00:00:00 considerado hoje ou amanhã. A meia-noite de hoje está atrás de nós, em quase todos os momentos, tecnicamente. Você quer 23:59:59 de "hoje à noite" ou 00:00:00 "meia-noite de hoje, que é amanhã", mais ou menos.
wesside
5
um horário de 00:00:00 seria a meia-noite de hoje como o tempo que leva para chegar às 00:00:00 que já aconteceram. onde 23:59:59 seria esta noite. Se você está falando em termos de hoje. Meia-noite é AM.
Nazca
4
00:00 é meia-noite no início de um dia, 24:00 é meia-noite no final de um dia. Para simplificar, entretanto, a maioria dos relógios digitais pula as 24:00 - declarando que a meia-noite é o início de um novo dia. Ou seja, 8 de fevereiro às 24:00 e 9 de fevereiro às 00:00 é, na prática, o mesmo ponto no tempo.
@SamHuckaby: É ainda mais fácil: $timestamp = strtotime('today');é meia-noite. Mas pssst, o acima parece mais legal como uma resposta à pergunta;)
hakre
Na verdade, preciso começar hoje e meia-noite de hoje. Como posso encontrar o início de hoje, quero dizer, às 00:00:00
Happy Coder
3
@AlwinAugustin: Você deve considerar a possibilidade de diferir seu texto. A meia-noite é tecnicamente entre dois dias. Portanto, existe um tipo de "não hoje mais". Além disso: Midgnight de hoje (por definição) é (logo antes) o início de hoje. Você provavelmente quer dizer a próxima meia-noite depois do meio-dia de hoje .
hakre
sim, na verdade, o que eu preciso é 00:00:00 de hoje e 23:59:59 de hoje
Happy Coder
2
Lembre-se de que isso produzirá a meia-noite do fuso horário do seu servidor PHP, não UTC + 0 ! Para obter UTC + 0, você pode usar strtotime('today+00:00').
mae de
73
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 =newDateTime();
$today->setTime(0,0);
Ou se estiver usando PHP 5.4 ou posterior, você pode fazer desta forma:
$today =(newDateTime())->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.
Também prefiro usar o novo objeto DateTime. Se você combinar esta resposta com @hakr's, obterá:, o new DateTime('today midnight')que torna a intenção mais clara (mas isso é obviamente uma questão de gosto).
Martijn de
1
Estou fazendo um trabalho ORM SQL e tive que usar o objeto DateTime para comparações. Isso é exatamente o que eu estava procurando. +1
NobleUplift
Pode ser$today = new DateTime('today')
ProgZi
Também é útil se você estiver usando Carbon, que herda de DateTime. Assim, você também pode fazer new Carbon('today midnight')e usar todas as coisas de Carbono como ->subDays(6). Consulte carbon.nesbot.com
Christopher K.
Com relação à restrição de 32 bits: O documento PHP para strtotime afirma : "Para versões de 64 bits do PHP, o intervalo válido de um carimbo de data / hora é efetivamente infinito, já que 64 bits podem representar aproximadamente 293 bilhões de anos em qualquer direção." Portanto, só se aplica a php de 32 bits.
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();
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.
Existe um formato específico que o OP solicitou? Nesse caso, ficaria feliz em modificar minha postagem para retornar o formato que eles desejarem.
SamHuckaby
completamente esquecido strtotime(), a mente estava tão focada na função de data. Desculpas.
wesside
2
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.
Respostas:
Você pode querer dar uma olhada no que o PHP tem a oferecer: http://php.net/datetime
fonte
$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.
Ou se estiver usando PHP 5.4 ou posterior, você pode fazer desta forma:
Em seguida, você pode usar o
echo $today->format('Y-m-d');
para obter o formato que deseja como a saída do objeto.Objeto PHP DateTime
fonte
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.comHoje à meia-noite. Fácil.
fonte
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:
As definições potenciais de “aqui” estão listadas em https://secure.php.net/manual/en/timezones.php
fonte
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDdeve 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
fonte
strtotime()
, a mente estava tão focada na função de data. Desculpas.De forma mais objetiva:
exemplo:
e:
fonte
é o mesmo que
e é um pouco menos trabalhoso no seu servidor.
fonte
$midnight = strtotime('midnight');
é válido.Você também pode experimentar
strtotime('12am')
oustrtotime('[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.fonte
Se estiver usando Carbon, você pode fazer o seguinte. Você também pode formatar essa data para definir um
Expire
cabeçalho HTTP.fonte
Resposta atualizada em 19 de abril de 2020
Simplesmente podemos fazer isso:
$today = date('Y-m-d 00:00:00');
fonte
fonte