Небольшая придирка: у вашей функции возникают проблемы около полуночи, если это время охватывает переход на летнее время. Тут помогает явный переход после полудня.
Дедупликатор
1
Неправильно . 3 вещи о DST: 1 это зависит от времени сервера, если сервер имеет правильный часовой пояс, это не повлияет на мою работу. 2 не весь мир влияет на летнее время, есть места, которые его не используют. 3 большинство мест используют для изменения времени в первые часы дня (например, в 2 или 3 часа ночи), поэтому это не повлияет на смену дня.
Fabio
1
1. Итак, эта функция знает и принимает во внимание, что день может быть отличным от 24 часов? 2. Даже сломанные часы показывают правильные два раза в день. 3. Точный час, который был украден / продублирован, не так важен для расчета.
Дедупликатор
1
нет смысла 1 в день не что иное, как 24, пока летнее время не изменится время, а сервер изменит время в соответствии с 2, конечно, но это не пункт 3, это очень важно вместо этого, ваша идея может быть правильной, если время изменится в полночь, не в другие часы
Не гарантируется переход на летнее время ... людям действительно стоит использовать объекты DateTime в наши дни
Марк Бейкер
Будет работать нормально, если работать по времени UTC. date_default_timezone_set ('UTC');
Патрик
7
Шаг 1
Нам нужно установить данные формата в функции date (): функция date () возвращает строку, отформатированную в соответствии с заданной строкой формата, используя заданную целочисленную метку времени или текущее время, если метка времени не указана. Другими словами, timestamp не является обязательным и по умолчанию соответствует значению time ().
<?phpecho date("F j, Y");
?>
результат: 30 марта 2010 г.
Шаг 2
Для "вчерашней" даты используйте функцию php mktime (): Функция mktime () возвращает временную метку Unix, соответствующую указанным аргументам. Эта временная метка представляет собой длинное целое число, содержащее количество секунд между эпохой Unix (1 января 1970 00:00:00 по Гринвичу) и указанным временем. Аргументы могут быть опущены справа налево; любые пропущенные аргументы будут установлены на текущее значение в соответствии с местными датой и временем.
$tz = new DateTimeZone('Your Time Zone');
$date = new DateTime($today,$tz);
$interval = new DateInterval('P1D');
$date->sub($interval);
echo$date->format('d.m.y');
?>
Ответы:
вот вы идете
date('d.m.Y',strtotime("-1 days"));
это будет работать также при изменении месяца
источник
вы можете сделать это
date("F j, Y", time() - 60 * 60 * 24);
или по
date("F j, Y", strtotime("yesterday"));
источник
Шаг 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
источник
попробуй это
$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:
echo date("Y-m-d", strtotime("yesterday"));
источник
Если вы определите часовой пояс в своем приложении 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
(Вы можете определить константу или переменную среды для хранения часового пояса по умолчанию.)
источник
попробуй это
<?php $yesterday = date(“d.m.Y”, time()-86400); echo $yesterday;
источник
Другой метод ООП для DateTime с установкой точного часа:
$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London')); echo $yesterday->format('Y-m-d H:i:s') . "\n";
источник
Вы также можете сделать это с помощью библиотеки 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'
источник