dodanie 1 dnia do wartości formatu DATETIME


89

W niektórych sytuacjach chcę dodać 1 dzień do wartości mojej zmiennej w formacie DATETIME:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

Jaki jest najlepszy sposób, aby to zrobić?

Odpowiedzi:


64

Jeśli chcesz to zrobić w PHP:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

Jeśli chcesz dodać datę w MySQL:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

czy to nie da mi aktualnego czasu? nadal muszę zachować czas wprowadzony przez użytkownika.
Ian

Tak, ale zaznaczyłem, jakie wartości należy zmienić na niestandardowy czas. Można po prostu zastąpić time()z strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

to nie jest ochrona na lato / zimę! Proszę użyć zmiany daty / czasu DST
Steven

212

Jest więcej niż jeden sposób, aby to zrobić za pomocą DateTime, który został wprowadzony w PHP 5.2. W przeciwieństwie do korzystania z strtotime()tego, uwzględni się czas letni i rok przestępny.

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

// Available in PHP 5.3

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

// Available in PHP 5.4

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

// Available in PHP 5.5

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

Ach, pętla da pętla .
Funk Forty Niner

9
Jeśli dodajesz więcej niż jeden dzień, możesz użyć liczby mnogiej lub pojedynczej i uzyskać ten sam wynik, np .: +2 daylub +2 days(oczywiście +2 daysjest bardziej poprawne semantycznie)
timhc22

1
Jakie są praktyczne różnice między tymi metodami? Pierwszy przykład wydaje mi się najprostszy i najbardziej semantyczny.
BadHorsie

24

Konstruktor DateTime przyjmuje parametr string time. $timemogą być różne rzeczy, musi przestrzegać formatu daty i godziny .

Oto kilka prawidłowych wartości jako przykłady:

  • 'now' (wartość domyślna)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Tak więc w twoim przypadku możesz użyć następującego.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
Odpowiadasz bez wyjaśnienia? Przeczytaj Jak napisać dobrą odpowiedź?
Shashanth

11
  1. Służy strtotimedo konwersji ciągu na znacznik czasu
  2. Dodaj do niego dzień (np .: dodając 86400 sekund (24 * 60 * 60))

na przykład:

$time = strtotime($myInput);
$newTime = $time + 86400;

Jeśli jest to tylko dodanie 1 dnia, ponowne użycie strtotime jest prawdopodobnie przesadą.


Więc muszę przekonwertować go na TIMESTAMP, a następnie z powrotem na format DATETIME?
Ian

4
Chyba trzeba też zauważyć, że nie każdy dzień trwa 24 godziny. W większości miejsc na świecie czas letni (czas letni) oznacza, że ​​jeden dzień w roku to tylko 23 godziny, a drugi 25 godzin.
nickf

UPS. Konwertujesz datę i godzinę na znacznik czasu, więc jest oparty na UTC. A dni UTC mają zawsze 24 godziny . Podczas konwersji z powrotem z date()lokalną strefą czasową brana jest pod uwagę, która zajmie się czasem letnim.
rabudde

5

Możesz użyć

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

Możesz użyć w następujący sposób.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

Możesz również ustawić dni jako stałe i używać jak poniżej.

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));

0

Korzystanie z czasu żądania serwera, aby dodać dni. Działa zgodnie z oczekiwaniami.

25/08/19 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

Tutaj „+2 dni”, aby dodać dowolną liczbę dni.


0

Istnieje bardziej zwięzły i intuicyjny sposób dodawania dni do daty php. Nie zrozum mnie źle, te wyrażenia php są świetne, ale zawsze musisz wygooglować, jak je traktować. Brakuje mi za to funkcji automatycznego uzupełniania.

Oto, jak lubię radzić sobie z takimi przypadkami:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

Dla mnie jest to o wiele bardziej intuicyjne, a autouzupełnianie działa od razu po wyjęciu z pudełka. Nie musisz za każdym razem wyszukiwać w Google rozwiązania.

Jako miły bonus, nie musisz się martwić formatowaniem wynikowej wartości, jest to już format ISO8601.

Jest to biblioteka beza, istnieje więcej przykładów tutaj .

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.