jak uzyskać datę wczoraj za pomocą php?


90

Chcę uzyskać wczorajszą datę przy użyciu określonego formatu daty w php, jest to format:

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

Czy to możliwe?

Weź pod uwagę miesiąc i lata, jeśli powinny być odpowiednio zmienione.


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

czy wypróbowałeś moje rozwiązanie? to zadziała również ze zmieniającymi się miesiącami
Fabio

idealny moment, kiedy nazwa użytkownika „noob” nade mną dodaje dobrego znaczenia swojemu komentarzowi :)
STT LCU

Odpowiedzi:


262

proszę bardzo

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

zadziała to również w przypadku zmiany miesiąca


Mały wybór: Twoja funkcja wpadnie w kłopoty około północy, jeśli w tym czasie nastąpi zmiana czasu letniego. Pomocne jest tu jawne przejście w południe.
Deduplicator

1
Źle . 3 rzeczy na temat czasu letniego: 1 zależy od czasu serwera, jeśli serwer ma odpowiednią strefę czasową, nie wpłynie to na moją funkcję. 2 Czas letni nie dotyczy całego świata, są miejsca, które go nie używają. 3 większość miejsc używa do zmiany czasu w pierwszych godzinach dnia (np. 2 lub 3 w nocy), więc nie będzie to miało wpływu na zmieniający się dzień.
Fabio

1
1. Więc ta funkcja wie i bierze pod uwagę, że dzień może być inny niż 24 godziny? 2. Nawet zepsuty zegar dwa razy dziennie wskazuje prawidłową godzinę. 3. Dokładna godzina, która została skradziona / skopiowana, nie jest tak ważna dla obliczeń.
Deduplicator,

1
bez sensu 1 dziennie to nie więcej niż 24 do czasu letniego zmienić czas, a serwer zmienia czas zgodnie z 2 oczywiście tak, ale nie o to chodzi 3 to jest bardzo ważne zamiast tego, twój pomysł może być dobry, jeśli czas zmieni się o północy, nie w innych godzinach
Fabio

7

możesz to zrobić przez

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

lub przez

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

3
Brak gwarancji w przypadku czasu letniego ... ludzie naprawdę powinni w tych dniach używać obiektów DateTime
Mark Baker

Będzie działać dobrze, jeśli działa w czasie UTC. date_default_timezone_set ('UTC');
Patrick

7

Krok 1

Potrzebujemy ustawić dane formatu w funkcji date (): Funkcja date () zwraca łańcuch sformatowany zgodnie z danym ciągiem formatującym przy użyciu podanego znacznika czasu w postaci liczby całkowitej lub bieżącego czasu, jeśli nie podano znacznika czasu. Innymi słowy, timestamp jest opcjonalny i domyślnie przyjmuje wartość time ().

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

wynik: 30 marca 2010

Krok 2

Dla daty „wczoraj” użyj funkcji php mktime (): Funkcja mktime () zwraca uniksowy znacznik czasu odpowiadający podanym argumentom. Ten znacznik czasu jest długą liczbą całkowitą zawierającą liczbę sekund między epoką systemu Unix (1 stycznia 1970 00:00:00 GMT) a określonym czasem. Argumenty można pominąć w kolejności od prawej do lewej; wszelkie pominięte argumenty zostaną ustawione na bieżącą wartość zgodnie z lokalną datą i godziną.

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

wynik: 1269820800

Krok 3

Teraz połącz wszystko i spójrz na to:

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

wynik: 29 marca 2010

Działając w podobny sposób możliwe jest cofnięcie czasu o godzinę.

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

wynik: 20:00:00

lub 7 dni temu:

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

wynik: 2010-03-23


7

Spróbuj tego

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

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

        ?>           

zobacz php.net/manual/en/book.datetime.php '.. To zadziała również ze zmianą miesiąca
zawsze ucz się

9
new DateTime („wczoraj”)
Virgili Garcia

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

Przydałoby się trochę wyjaśnienia z tą odpowiedzią zawierającą tylko kod.
mickmackusa,


3

Jeśli zdefiniujesz strefę czasową w swojej aplikacji PHP (tak jak powinieneś), możesz to zrobić w ten sposób:

date_default_timezone_set('Europe/Paris');

Wtedy jest to tak proste, jak:

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

(Możesz chcieć zdefiniować stałą lub zmienną środowiskową do przechowywania domyślnej strefy czasowej).


2

Spróbuj tego

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

3
Z powodu czasu letniego dzień nie zawsze ma 86400 sekund! Więc te obliczenia mogą być błędne dwa razy w roku!
sbrbot

... i dzięki sekundom przestępnym.
Sebastian Mach

1

Inna metoda OOP dla DateTime z ustawieniem dokładnej godziny:

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

0

Możesz to również zrobić za pomocą biblioteki Carbon :

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

W innych formatach:

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'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.