2011-01-20 10 views
8

W moim kodu ActionScript Mam dwóch terminach:ActionScript Data Porównanie

var date1:Date = new Date(2011,1,1); 
var date2:Date = new Date(2011,1,1); 

to nie działa:

var equal:Boolean = date1 == date2; 

od czytania Znalazłem, że jest to alternatywa pracy, ponieważ tylko pobiera liczbę milisekund ze standardowego punktu w czasie.

var equal:Boolean = date1.getTime() == date2.getTime(); 

Więc moje pytania to:

  1. Dlaczego nie normalna praca operator równości na daty w ActionScript?
  2. ">" a także "<" operatorzy wydają się działać dobrze, ale czy można im ufać?
  3. Dlaczego działają, ale nie operator równości?
  4. Czy istnieje standardowa metoda, z której mogę korzystać podczas porównywania dat, które po prostu zwracają wartość -1, 0 lub 1 (zdaję sobie sprawę, że mogę łatwo tworzyć własne, ale wolałbym użyć istniejącej klasy narzędziowej)?

Z góry dziękuję.

Odpowiedz

6
  1. Ponieważ terminy są obiekty (instancje klasy), zamiast natywnego typu danych, więc zawsze będą się różnić, chyba że co innego odniesienia do tej samej instancji.
  2. Prawdopodobnie, ponieważ zostaną one przekształcone na format natywny (liczba) w porównaniu (patrz type conversions). Nie wiesz, czy jest to rzutowanie na liczbę lub ciąg znaków? Pamiętaj, aby przetestować
  3. Ponieważ nie są one równe; nie są tym samym obiektem.
  4. Porównanie, które zrobiłeś (używając getTime()), jest najlepszą rzeczą, z której możesz korzystać, jak sądzę.
15

Re: # 4

Można użyć funkcji ObjectUtil.dateCompare(), aby uzyskać wyniki, które szukasz.

mx.utils.ObjectUtil.dateCompare()

+1

Dzięki! Oznaczę to jako odpowiedź, jeśli nikt nie zadzwoni z odpowiedzią na pozostałe pytania. – Ocelot20