W JavaScript daty można przekształcić na liczbę milisekund od epoc, wywołując getTime()
metodę lub po prostu używając daty w wyrażeniu numerycznym.
Aby uzyskać różnicę, po prostu odejmij dwie daty.
Aby utworzyć nową datę w oparciu o różnicę, po prostu podaj liczbę milisekund w konstruktorze.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
To powinno po prostu działać
EDYCJA : Naprawiono błąd wskazany przez @bdukes
EDYCJA :
Dla wyjaśnienia zachowania oldBegin
, oldEnd
i newBegin
są Date
przypadki. Operatory wywołujące +
i -
wyzwalają automatyczne rzutowanie JavaScript i automatycznie wywołują valueOf()
metodę prototypową tych obiektów. Zdarza się, że valueOf()
metoda jest zaimplementowana w Date
obiekcie jako wywołanie getTime()
.
Więc w zasadzie: date.getTime() === date.valueOf() === (0 + date) === (+date)
Date
obiektami? Trudno powiedzieć, jakiego typu obiekt mają być, ponieważ pominięto tutaj deklarację zmiennej.JavaScript doskonale obsługuje różnicę dat po wyjęciu z pudełka
Teraz kilka pułapek. Spróbuj tego:
Jeśli więc istnieje ryzyko dodania liczby i daty, przekonwertuj datę
number
bezpośrednio na.Mój pierwszy przykład demonstruje siłę obiektu Date, ale w rzeczywistości wydaje się, że jest to bomba zegarowa
źródło
-
przekształca argumenty w liczbę, więc Date zwraca wartość czasu.+
Operator jest przeciążony, więc można zrobić dodatek, przymusu do liczby lub konkatenacji. Ponieważ Dates wymusza na String w tym przypadku,+
wykonuje konkatenację. Zamieszanie nie jest winą obiektu Date, ale przeciążenia operatorów.Zobacz JsFiddle DEMO
dla Twojego kodu HTML:
źródło
Jeśli nie interesuje Cię składnik czasu, możesz użyć
.getDate()
i.setDate()
po prostu ustawić część daty.Aby ustawić datę zakończenia na 2 tygodnie po dacie rozpoczęcia, zrób coś takiego:
Aby zwrócić różnicę (w dniach) między dwiema datami, wykonaj następujące czynności:
Na koniec zmodyfikujmy pierwszą funkcję, aby mogła przyjąć wartość zwróconą przez 2nd jako parametr:
źródło
GetDateDiff()
przełamie miesięczne bariery. Na przykład 2011/04/26 i 2011/05/01 zwróci wartość -25, ale przesunięcie powinno wynosić 5 dni.Dzięki @ Vincent Robert , w końcu użyłem twojego podstawowego przykładu, chociaż tak naprawdę jest
newBegin + oldEnd - oldBegin
. Oto uproszczone rozwiązanie końcowe:źródło
getTime
a czasami nieW zależności od potrzeb ta funkcja obliczy różnicę między 2 dniami i zwróci wynik w postaci liczby dni po przecinku.
źródło
Math.abs()
wywołaniu, a zawsze otrzymasz dodatnią liczbę dziesiętną.date.getTime()
aby uzyskać czas w przyszłości / przeszłości. `var nextMinute = new Date (someDate.getTime () + 60 * 1000);Jeśli używasz momentu.js, istnieje prostsze rozwiązanie, które da ci różnicę w dniach w jednej linii kodu.
Dodatkowe szczegóły można znaleźć na stronie moment.js.
Dzięki, Miguel
źródło
źródło
alternatywny rozszerzony kod modyfikacji.
http://jsfiddle.net/vvGPQ/48/
źródło
źródło
źródło
ten kod wypełnia czas trwania lat studiów, kiedy wprowadzisz datę rozpoczęcia i datę zakończenia (zakwalifikuj datę dokładną) studiów i sprawdź, czy czas trwania jest krótszy niż rok, jeśli tak, alert, o którym pamięta wiadomość, istnieją trzy elementy wejściowe: pierwszy
txtFromQualifDate
i drugatxtQualifDate
i trzeciatxtStudyYears
pokaże wynik liczby lat z ułamkiem
źródło
getFullYear
które zostało zaprojektowane do tego. ------- Zobacz bibliotekę datejs w googlecode, która prawdopodobnie obsługuje większość przypadków narożnychJeśli użyjesz obiektów Date, a następnie użyjesz
getTime()
funkcji dla obu dat, poda ich odpowiednie czasy od 1 stycznia 1970 w wartości liczbowej. Możesz wtedy uzyskać różnicę między tymi liczbami.Jeśli to ci nie pomoże, zapoznaj się z pełną dokumentacją: http://www.w3schools.com/jsref/jsref_obj_date.asp
źródło
Poniższy kod zwróci liczbę dni pozostałych od dnia dzisiejszego do daty kontraktu.
Zależności: jQuery i MomentJs.
źródło
źródło
TO CO ZROBIŁEM W MOIM SYSTEMIE.
źródło