как получить вчерашнюю дату с помощью php?


93

Я хочу получить вчерашнюю дату, используя определенный формат даты в php, это формат:

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

Является ли это возможным?

Примите во внимание месяц и год, если они должны быть изменены соответственно.


1
дата ("дмы", время () - 60 * 60 * 24);
NINCOMPOOP

ты пробовал мое решение? это будет работать и с изменением месяцев
Фабио

идеальный момент, когда имя пользователя "noob" над мной добавляет хороший смысл в его комментарий :)
STT LCU

Ответы:


268

вот вы идете

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

это будет работать также при изменении месяца


Небольшая придирка: у вашей функции возникают проблемы около полуночи, если это время охватывает переход на летнее время. Тут помогает явный переход после полудня.
Дедупликатор

1
Неправильно . 3 вещи о DST: 1 это зависит от времени сервера, если сервер имеет правильный часовой пояс, это не повлияет на мою работу. 2 не весь мир влияет на летнее время, есть места, которые его не используют. 3 большинство мест используют для изменения времени в первые часы дня (например, в 2 или 3 часа ночи), поэтому это не повлияет на смену дня.
Fabio

1
1. Итак, эта функция знает и принимает во внимание, что день может быть отличным от 24 часов? 2. Даже сломанные часы показывают правильные два раза в день. 3. Точный час, который был украден / продублирован, не так важен для расчета.
Дедупликатор

1
нет смысла 1 в день не что иное, как 24, пока летнее время не изменится время, а сервер изменит время в соответствии с 2, конечно, но это не пункт 3, это очень важно вместо этого, ваша идея может быть правильной, если время изменится в полночь, не в другие часы
Fabio

7

вы можете сделать это

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

или по

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

3
Не гарантируется переход на летнее время ... людям действительно стоит использовать объекты DateTime в наши дни
Марк Бейкер

Будет работать нормально, если работать по времени UTC. date_default_timezone_set ('UTC');
Патрик

7

Шаг 1

Нам нужно установить данные формата в функции date (): функция date () возвращает строку, отформатированную в соответствии с заданной строкой формата, используя заданную целочисленную метку времени или текущее время, если метка времени не указана. Другими словами, timestamp не является обязательным и по умолчанию соответствует значению time ().

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

результат: 30 марта 2010 г.

Шаг 2

Для "вчерашней" даты используйте функцию php mktime (): Функция mktime () возвращает временную метку Unix, соответствующую указанным аргументам. Эта временная метка представляет собой длинное целое число, содержащее количество секунд между эпохой Unix (1 января 1970 00:00:00 по Гринвичу) и указанным временем. Аргументы могут быть опущены справа налево; любые пропущенные аргументы будут установлены на текущее значение в соответствии с местными датой и временем.

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

результат: 1269820800

Шаг 3

Теперь слейте все и посмотрите на это:

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

результат: 29 марта 2010 г.

Действуя аналогичным образом, можно получить час назад.

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

результат: 20:00:00

или 7 дней назад:

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

результат: 2010-03-23


7

попробуй это

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

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

        ?>           

см. этот php.net/manual/en/book.datetime.php '.. Это также будет работать с изменением месяца
alwaysLearn

10
new DateTime ('вчера')
Вирджили Гарсия

1
$ вчера = новый DateTime ('вчера', новый DateTimeZone ('Ваш часовой пояс'));
miralong

Было бы неплохо немного пояснить этот ответ, содержащий только код.
mickmackusa


4

Если вы определите часовой пояс в своем приложении PHP (как и следовало бы), это можно сделать следующим образом:

date_default_timezone_set('Europe/Paris');

Тогда это очень просто:

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

(Вы можете определить константу или переменную среды для хранения часового пояса по умолчанию.)


2

попробуй это

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

3
Из-за перехода на летнее время в сутках не всегда бывает 86400 секунд! Так что два раза в год этот расчет может ошибаться!
sbrbot

... и из-за дополнительных секунд.
Себастьян Мах

1

Другой метод ООП для DateTime с установкой точного часа:

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

0

Вы также можете сделать это с помощью библиотеки Carbon :

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

В других форматах:

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'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.