Mój kod dodania jednego dnia do daty zwraca datę przed dniem dodając:
2009-09-30 20:24:00
data po dodaniu jednego dnia POWINIEN zostać przeniesiony na następny miesiąc:1970-01-01 17:33:29
<?php
//add day to date test for month roll over
$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>
Używałem wcześniej podobnego kodu, co ja tu robię źle?
date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));
jak w odpowiedzi, którą dał ci @ w35l3y.źródło
Najprostsze rozwiązanie:
źródło
echo (new DateTime('+1 day'))->format('Y-m-d H:i:s');
Unexpected T_OBJECT_OPERATOR” error in PHP
U mnie zadziałało: na aktualną datę
dla dowolnej daty:
źródło
strtotime()
- poradzi sobie ze wszystkim podczas jednego połączenia:date('Y-m-d', strtotime($date . " +1 day"));
Spróbuj tego
źródło
Prosty do odczytania i zrozumienia sposób:
źródło
Zawsze po prostu dodaję 86400 (sekund dziennie):
To nie jest najsprytniejszy sposób, w jaki prawdopodobnie możesz to zrobić, ale działa!
źródło
Chociaż zgadzam się z odpowiedzią Douga Haysa, wezmę tutaj, aby powiedzieć, że powodem, dla którego twój kod nie działa, jest to, że strtotime () oczekuje INT jako drugiego argumentu, a nie łańcucha (nawet takiego, który reprezentuje datę)
Jeśli włączysz maksymalne raportowanie błędów, zobaczysz to jako błąd „Nieprawidłowa wartość liczbowa”, który jest na poziomie E_NOTICE.
źródło
modify()
Metoda, która może być używana do dodawania przyrosty do istniejącejDateTime
wartości.Utwórz nowy
DateTime
obiekt z aktualną datą i godziną:Gdy już masz
DateTime
obiekt, możesz manipulować jego wartością, dodając lub odejmując okresy:Możesz przeczytać więcej w podręczniku PHP .
źródło
Poniższy kod pobiera pierwszy dzień stycznia bieżącego roku (ale może to być inna data) i dodaje 365 dni do tego dnia (ale może to być N liczba dni) przy użyciu klasy DateTime i jej metody modified () i format ( ):
źródło
Ponieważ masz już odpowiedź na pytanie, co jest nie tak z Twoim kodem, mogę przedstawić inną perspektywę, w jaki sposób możesz ogólnie bawić się czasami dat i konkretnie rozwiązać Twój problem.
Często zdarza się, że stwarzasz problem dotyczący rozwiązania. To tylko jeden z powodów, dla których otrzymujesz kod imperatywny . Ale to świetnie, jeśli działa; istnieją tylko inne, prawdopodobnie łatwiejsze w utrzymaniu alternatywy. Jednym z nich jest kod deklaratywny . Chodzi o to, aby zapytać, czego potrzebujesz, a nie jak się tam dostać.
W Twoim przypadku może to wyglądać następująco. Po pierwsze, trzeba dowiedzieć się, co to jest, że szukasz, to znaczy odkryć abstrakcje. W twoim przypadku wygląda na to, że potrzebujesz randki . Nie byle jaką datę, ale taką, która ma jakieś standardowe przedstawienie. Powiedzmy, data ISO8601. Istnieją co najmniej dwie implementacje: pierwsza to data przeanalizowana z ciągu w formacie ISO8601 (lub w rzeczywistości ciąg w jakimkolwiek innym formacie), a druga to jakaś przyszła data, która jest dzień później. Zatem cały kod mógłby wyglądać tak:
Więcej przykładów z żonglerką datetime, sprawdź ten .
źródło