Mam, NSDate
które muszę porównać z dwoma innymi NSDate
i próbuję z NSOrderAscending
i NSOrderDescending
ale czy moja data jest równa w pozostałych dwóch terminach?
Przykład: jeśli mam myDate = 24/05/2011
i dwa pozostałe, czyli jeden = 24/05/2011
i dwa, 24/05/2011
czego mogę użyć?
objective-c
ios
nsdate
jazda na rowerze jest lepsza
źródło
źródło
Odpowiedzi:
Zgodnie z dokumentacją Apple dotyczącą
NSDate compare:
Innymi słowy:
Zauważ, że w twoim konkretnym przypadku może być łatwiejsze przeczytanie i napisanie tego:
Zobacz dokumentację Apple dotyczącą tego .
źródło
NSDateComponents
Po częstym przeszukiwaniu stackoverflow i internetu, doszedłem do wniosku, że najlepszym sposobem na zrobienie tego jest tak:
Możesz również zmienić to na różnicę między godzinami.
Cieszyć się!
Edytuj 1
Jeśli chcesz porównać tylko datę z formatem dd / MM / rrrr, musisz dodać poniższe linie między
NSDate* currentdate = [NSDate date];
&&NSTimeInterval distance
źródło
Rozumiem, że pytasz, jaka jest wartość zwracana w funkcji porównania.
Jeśli daty są równe, to powrót
NSOrderedSame
Jeśli rosnąco (2. arg> 1. arg) powróć
NSOrderedAscending
Jeśli malejąco (2. arg <1. arg) powróć
NSOrderedDescending
źródło
Nie wiem dokładnie, czy o to pytałeś, ale jeśli chcesz porównać tylko składnik daty w NSDate, musisz użyć NSCalendar i NSDateComponents, aby usunąć składnik czasu.
Coś takiego powinno działać jako kategoria dla NSDate:
źródło
NSDate
faktycznie reprezentuje przedział czasu w sekundach od daty odniesienia (myślę, że 1 stycznia 2000 UTC). Wewnętrznie używana jest liczba zmiennoprzecinkowa podwójnej precyzji, więc jest bardzo mało prawdopodobne, aby dwie dowolne daty były równe, nawet jeśli są tego samego dnia. Jeśli chcesz sprawdzić, czy konkretna data przypada w określony dzień, prawdopodobnie musisz użyćNSDateComponents
. na przykładźródło
Sprawdź następującą funkcję dla porównania dat, najpierw utwórz dwa obiekty NSDate i przekaż do funkcji: Dodaj poniższe wiersze kodu w viewDidload lub zgodnie ze swoim scenariuszem.
tutaj jest funkcja
Po prostu zmień datę i przetestuj powyższą funkcję :)
źródło