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:
(new Future(
new DateTimeParsedFromISO8601('2009-09-30 20:24:00'),
new OneDay()
))
->value();
Więcej przykładów z żonglerką datetime, sprawdź ten .