PHP, Pobierz datę jutra od daty


89

Mam datę PHP w postaci 2013-01-22i chcę pobrać datę jutra w tym samym formacie, czyli np 2013-01-23.

Jak to możliwe w PHP?

Odpowiedzi:


205

Użyj DateTime

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

Lub:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

Lub:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

Lub w PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');

1
Używa prądu, muszę przejść w określonym terminie.
Justin,

Drugi sposób jest prawdopodobnie najlepszy.
nickb

73
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

lub

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

Link do pomocy: STRTOTIME ()


1
Użyłem tej jednej, a ze wszystkich odpowiedzi jest najkrótsza i najprostsza wersja, dzięki!
Bombelman

17

Ponieważ oznaczyłeś to tagiem , możesz go użyć z +1 daymodyfikatorem w następujący sposób:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

To powiedziawszy, znacznie lepszym rozwiązaniem jest użycie DateTime .


14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>

17
Należy pamiętać, że zakończy się to niepowodzeniem w skrajnych przypadkach (czas letni).
JJJ,

Ta odpowiedź jest błędna. Mam program cronjob, który używa tego w pętli, a system umarł.
jewelnguyen


3

Zastosowanie DateTime:

Aby dostać się jutro od teraz:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Wyniki: 28/06/2017 08.13.20

Aby dostać jutro od randki:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Wyniki: 11/06/2017 08.16.35

Mam nadzieję, że to pomoże!


1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}

1

Dziwnie może się wydawać, że działa idealnie: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

Powinienem to zrobić


0

Po pierwsze, kluczem jest zawsze wymyślanie prawidłowych abstrakcji. klucz do czytelności, łatwości utrzymania i rozszerzalności.

Tutaj dość oczywistym kandydatem jest ISO8601DateTime. Istnieją co najmniej dwie implementacje: pierwsza to przeanalizowana data i godzina z łańcucha, a druga to jutro. W związku z tym można zastosować dwie klasy, a ich połączenie daje (prawie) pożądany rezultat:

new Tomorrow(new FromISO8601('2013-01-22'));

Oba obiekty mają datę i godzinę ISO8601, więc ich tekstowa reprezentacja nie jest dokładnie tym, czego potrzebujesz. Ostatnim krokiem jest więc nadanie im formy daty:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

Ponieważ potrzebujesz reprezentacji tekstowej, a nie tylko obiektu, wywołujesz value()metodę.

Więcej informacji na temat tego podejścia znajdziesz w tym poście .


-1

tutaj działa funkcja

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

co robi funkcja formatDate4db? Po co zastępować myślniki ukośnikami w ciągu znaków?
braindigitalis

Funkcja formatDate4db przekazuje datę i tworzy format podobny do formatu bazy danych mysql i funkcji str_replace, mam format daty 2019/12/10 i zamieniam na -
Muhammad Awais Zulifqar

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Gdzie 86400 to liczba sekund w ciągu dnia.


11
Nie, jeden dzień nie zawsze ma 86400 sekund.
nickb

Nie mam problemu. Proszę wyjaśnić @nickb
Aiyion.Prime

@ Aiyion.Dni prime, w których następuje przejście do lub z czasu letniego, nie mają 86400 sekund
dumazy

Pomyślałem, że czas letni rozpoczyna się o godzinie drugiej i dlatego nie powinien nigdy skutkować inną datą?
Aiyion. Prime

Problemem nie jest oszczędność światła dziennego. Czasy w bazie danych naprawdę powinny być przechowywane w formacie UTC, który nie ma czasu letniego. Jeśli przechowujesz swoje daty w UTC, będzie to działać dobrze, ale jest nieco tępe.
braindigitalis
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.