Próbuję ustalić, czy DateTime
dokładnie pokrywa się z możliwym pojawieniem się DateInterval
. Odstępy, których używam, muszą uwzględniać specyfikacje formatu typu "N-ty dzień od następnego miesiąca" i nie jestem pewien, czy jest to możliwe, biorąc pod uwagę te warunki.php - ustal, czy DateTime przypada na DateInterval
Moim podstawowym założeniem było odwrócić DateInterval
, stosuje się go do klonem oryginalnej DateTime
, umieścić go z powrotem jak było zastosować ponownie, a następnie sprawdzić, czy te dwie DateTime
przypadki były równe. Jeśli tak, to pojawia się dokładnie w przedziale:
public static function dateFallsOnPeriod(DateTime $date, DateInterval $interval)
{
$compare = clone $date;
// invert the period, apply it to the date, uninvert & then reapply
$interval->invert = 1;
$compare->add($interval);
$interval->invert = 0;
$compare->add($interval);
return $date == $compare;
}
To wydawało się zastosowanie odstępu dwa razy w tym samym kierunku, a więc spróbowałem ponownie stosując ->sub()
i ->add()
, w wyniku błędu krytycznego „DateTime :: sub (): Obsługiwane są tylko niezwiązane ze specyfikacją specyfikacje czasu względnego dla odejmowania ". Wygląda na to, że tego rodzaju funkcjonalność nie jest w ogóle zaimplementowana.
Czy ktoś ma lepsze pomysły, zamiast brzydkiego & nieskuteczne rozwiązanie doboru offset dobrze za datę rozpoczęcia i iteracji do przodu, dopóki nie dopasował go lub minął?
z góry dzięki!
'invert' wykonuje sub i przetestował go. twój okręt podwodny i dodaj się wzajemnie zlikwiduj. mówi, że sprawdzanie, czy $ porównać == $ datę na początku – DevZer0
Czy możesz wyjaśnić pytanie na przykładzie? Co mnie myli, to że nazwa funkcji wskazuje, że chcesz sprawdzić, czy okres pokrywa się z datą, ale przekazujesz do swojej funkcji DateTime i DateInteral, zamiast - jak przypuszczam - DateTime i DatePeriod? – luttkens
Domyślam się, że metoda powinna nazywać się "dateCoincidesWithInterval" lub czymś, przepraszam za to. @ DevZer0: Powód dodawania, odejmowania i porównywania nie zawsze się eliminuje, wynika z tych specjalnych odstępów, które pozwala na to PHP. Jeśli więc twój przedział określał "pierwszą niedzielę miesiąca", a minąłeś poniedziałek jako "$ date", chciałbyś wiedzieć, że ta pierwsza data nie pasuje do przedziału. Aby uzyskać więcej normalnych odstępów czasu, to, co mówisz, jest prawdą, a metoda nie jest naprawdę potrzebna, ale chcę omówić każdą możliwość z tą. – pospi