como obter a data de ontem usando php?


88

Eu quero obter a data de ontem usando o formato de data específico em php, este é o formato:

$today = date("d.m.Y"); //15.04.2013

É possível?

Leve em consideração o mês e os anos se eles devem ser alterados nos respectivos.


1
data ("dmy", hora () - 60 * 60 * 24);
NINCOMPOOP de

você tentou minha solução? isso funcionará com a mudança de meses também
Fabio

o momento perfeito quando o nome de usuário "noob" acima de mim adiciona um bom significado ao seu comentário :)
STT LCU

Respostas:


258

ai está

date('d.m.Y',strtotime("-1 days"));

isso funcionará também se o mês mudar


Um pequeno detalhe: sua função terá problemas perto da meia-noite se esse horário ultrapassar a mudança de horário de verão. Ir explicitamente ao longo do meio-dia ajuda nisso.
Deduplicator

1
Errado . 3 coisas sobre o horário de verão: 1 depende do horário do servidor, se o servidor tiver o fuso horário correto, isso não afetará meu funcionamento. 2 nem todo o mundo é afetado pelo horário de verão, há lugares que não o usam. 3 a maioria dos lugares costuma mudar de horário durante as primeiras horas do dia (como 2 ou 3 horas), portanto, não afetará a mudança do dia.
Fabio

1
1. Então essa função sabe e cuida que um dia pode ser diferente de 24h? 2. Mesmo um relógio quebrado está certo duas vezes ao dia. 3. A hora exata que é roubada / duplicada não é tão importante para o cálculo.
Deduplicator

1
não faz sentido 1 um dia não é diferente de 24 até que o horário de verão mude a hora e o servidor mude a hora de acordo com 2 claro que é, mas esse não é o ponto 3 isso é muito importante, sua ideia pode estar certa se a hora mudar à meia-noite, não em outras horas
Fabio

7

você pode fazer isso por

date("F j, Y", time() - 60 * 60 * 24);

ou pela

date("F j, Y", strtotime("yesterday"));

3
Não garantido com o horário de verão ... as pessoas realmente deveriam usar objetos DateTime atualmente
Mark Baker

Funcionará bem se estiver operando no horário UTC. date_default_timezone_set ('UTC');
Patrick

7

Passo 1

Precisamos definir os dados de formato na função date (): A função date () retorna uma string formatada de acordo com a string de formato fornecida usando o timestamp inteiro fornecido ou a hora atual se nenhum timestamp for fornecido. Em outras palavras, timestampé opcional e o padrão é o valor de time ().

<?php
echo date("F j, Y");
?>

resultado: 30 de março de 2010

Passo 2

Para a data "ontem", use a função php mktime (): A função mktime () retorna o carimbo de data / hora Unix correspondente aos argumentos fornecidos. Este carimbo de data / hora é um número inteiro longo contendo o número de segundos entre a Época Unix (1 de janeiro de 1970 00:00:00 GMT) e a hora especificada. Os argumentos podem ser deixados de fora da direita para a esquerda; qualquer argumento omitido será definido com o valor atual de acordo com a data e hora locais.

<?php
echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
?>

resultado: 1269820800

etapa 3

Agora junte tudo e veja isto:

<?php
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
echo $yesterday;
?>

resultado: 29 de março de 2010

Operando de forma semelhante, é possível receber a hora de volta.

<?php
$yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
echo $yesterday;
?>

resultado: 20:00:00

ou 7 dias atrás:

<?php
$week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
echo $week;
?>

resultado: 23/03/2010


7

tente isso

        $tz    = new DateTimeZone('Your Time Zone');
        $date  = new DateTime($today,$tz);
        $interval = new DateInterval('P1D');
        $date->sub($interval); 

        echo $date->format('d.m.y');

        ?>           

veja este php.net/manual/en/book.datetime.php '.. Isso funcionará com a mudança de mês também
sempreAprenda

9
novo DateTime ('yesterday')
Virgili Garcia

$ yesterday = new DateTime ('yesterday', new DateTimeZone ('Your Time Zone'));
miralong

Um pouco de explicação com esta resposta apenas de código seria bom.
mickmackusa


2

tente isso

<?php
$yesterday = date(“d.m.Y”, time()-86400);
echo $yesterday;

3
Devido ao horário de verão, um dia nem sempre tem 86400 segundos! Portanto, esse cálculo pode estar errado duas vezes por ano!
sbrbot

... e devido a segundos bissextos.
Sebastian Mach

2

Se você definir o fuso horário em seu aplicativo PHP (como deveria), pode fazer desta forma:

date_default_timezone_set('Europe/Paris');

Então é tão simples como:

$yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
echo $yesterday->format('Y-m-d'); // or whatever format you want

(Você pode definir uma constante ou variável de ambiente para armazenar seu fuso horário padrão.)


1

Outro método OOP para DateTime com configuração da hora exata:

$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
echo $yesterday->format('Y-m-d H:i:s') . "\n";

0

Você também pode fazer isso usando a biblioteca Carbon :

Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'

Em outros formatos:

Carbon::yesterday()->toDateString();          // '2019-03-26'
Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'

Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.