як отримати дату вчора за допомогою php?


90

Я хочу отримати дату вчора, використовуючи певний формат дати в php, це такий формат:

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

Це можливо?

Враховуйте місяць і роки, якщо їх слід змінити відповідно.


1
дата ("dmy", час () - 60 * 60 * 24);
NINCOMPOOP

ти спробував моє рішення? це буде працювати і зі зміною місяців
Фабіо,

ідеальний момент, коли ім'я користувача "noob" наді мною додає гарного значення до свого коментаря :)
STT LCU

Відповіді:


262

ось так

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

це спрацює також, якщо зміниться місяць


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

1
Неправильно . 3 речі про літній час: 1 це залежить від часу сервера, якщо сервер має правильний часовий пояс, це не вплине на мою функцію. 2 Не на весь світ впливає літній час, є місце, яке не використовує його. 3 більшість місць використовують для зміни часу протягом перших годин дня (наприклад, 2 або 3 години ночі), тому це не вплине на зміну дня.
Фабіо

1
1. Отже, ця функція знає і береже, що день може бути іншим, ніж 24 години? 2. Навіть зламаний годинник правильний двічі на день. 3. Точна година, яку викрадено / продубльовано, не така важлива для розрахунку.
Дедулікатор

1
немає сенсу 1 на день - це не що інше, як 24, поки літній час не змінює час, а сервер змінює час відповідно до 2, звичайно, це є, але це не пункт 3, це натомість дуже важливо. не в інші години
Фабіо

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 () повертає рядок, відформатований відповідно до заданого рядка формату, використовуючи дану цілу мітку часу або поточний час, якщо метка часу не вказана. Іншими словами, мітка часу є необов'язковою, а за замовчуванням значення часу ().

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

результат: 30 березня 2010 р

Крок 2

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

<?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;
?>

результат: 23.03.2010


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 '.. Це також спрацює із зміною місяця
завждиВчитися

9
новий DateTime ('вчора')
Вірджилі Гарсія,

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

Було б непогано пояснити цю відповідь лише для коду.
mickmackusa


2

спробуйте це

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

3
Через перехід на літній час день не завжди має 86400 секунд! Тож цей розрахунок може бути помилковим двічі на рік!
sbrbot

... і через стрибкові секунди.
Себастьян Мах

2

Якщо ви визначите часовий пояс у своїй програмі 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

(Ви можете визначити константу або змінну середовища для зберігання часового поясу за замовчуванням.)


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.