Różnica w miesiącach między dwiema datami w roku JavaScript
Jak obliczyć różnicę dla dwóch obiektów Date () w JavaScript i zwrócić tylko liczbę miesięcy różnicy?
Każda pomoc byłaby bardzo pomocna :)
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
25 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Możesz pobrać rok, miesiąc i dzień miesiąca z obiektu daty JavaScript. W zależności od tego, jakich informacji szukasz, możesz ich użyć, aby dowiedzieć się, ile miesięcy dzieli się między dwoma punktami w czasie.
Na przykład, poza mankietem, to oblicza, ile
pełne miesiące
leży między dwiema datami, nie licząc niepełnych miesięcy (na przykład z wyłączeniem miesiąca, w którym znajduje się każda data):
(Zwróć uwagę, że wartości miesiąca w JavaScript zaczynają się od 0 = styczeń).
Uwzględnienie ułamkowych miesięcy w powyższym jest znacznie trudniejsze, ponieważ trzy dni w typowym lutym to więcej tego miesiąca (~ 10,714%) niż trzy dni w sierpniu (~ 9,677%), a oczywiście nawet luty jest celem ruchomym w zależności od tego, czy to rok przestępny.
Jest też kilka
biblioteki daty i czasu
http://www.datejs.com/
dostępne dla JavaScript, co prawdopodobnie ułatwi to zadanie.
Anonimowy użytkownik
Potwierdzenie od:
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Zauważ, że indeks miesiąca jest liczony od zera, co oznacza i .
Anonimowy użytkownik
Potwierdzenie od:
Jeśli potrzebujesz tylko liczby miesięcy między dwiema datami, z wyłączeniem miesiąca1 i miesiąca2
2. Jeśli chcesz uwzględnić którykolwiek z miesięcy
3. Jeśli chcesz uwzględnić oba miesiące
Anonimowy użytkownik
Potwierdzenie od:
Domyślne zachowanie liczy tylko całe miesiące, na przykład 3 miesiące i 1 dzień spowoduje różnicę 3 miesięcy. Możesz temu zapobiec, ustawiając na , aby różnica 3 miesięcy i 1 dnia została zwrócona jako 4 miesiące.
Przyjęta powyżej odpowiedź (odpowiedź T.J. Crowdera) nie jest dokładna, czasami zwraca błędne wartości.
Na przykład zwraca , co jest ewidentnie niepoprawne. Prawidłowa różnica to zaokrąglenie do 1 całego miesiąca lub 2 miesięcy.
Oto funkcja, którą napisałem:
Anonimowy użytkownik
Potwierdzenie od:
To jest rozszerzona wersja odpowiedzi
https://stackoverflow.com/a/4312956/1987208
https://stackoverflow.com/a/4312956/1987208
ale rozwiązuje przypadek, w którym oblicza 1 miesiąc dla sprawy od 31 stycznia do 1 lutego (1 dzień).
Obejmuje to następujące;
Anonimowy użytkownik
Potwierdzenie od:
łączna liczba miesięcy między datą_początkową a datą_końcową:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Nie uwzględnia to w pełni problemów z synchronizacją (np. 3 marca o 16:00 i 3 kwietnia o 15:00), ale jest dokładniejsze i obejmuje tylko kilka wierszy kodu.
Anonimowy użytkownik
Potwierdzenie od:
To da ci różnicę w miesiącach między dwiema datami, z pominięciem dni.
Anonimowy użytkownik
Potwierdzenie od:
Jeśli przejrzysz kalendarz, zwiększ datę początkową o jeden miesiąc i sprawdź, czy minęła data końcowa. To deleguje obsługę anomalii do wbudowanych klas Date (), ale może być powolne
IF
robisz to przez wiele randek. Odpowiedź Jamesa opiera się na tym podejściu. Chociaż bardzo mi się podoba ten pomysł, myślę, że jest to „najbezpieczniejsze” podejście i jeśli tylko to robisz
jeden
obliczenia, różnica w wydajności jest naprawdę znikoma. Staramy się nadmiernie optymalizować zadania, które zostaną uruchomione tylko raz.
Teraz,
Jeśli
obliczasz tę funkcję na zbiorze danych, prawdopodobnie nie chcesz uruchamiać tej funkcji na każdym wierszu (lub, nie daj Boże, wiele razy w rekordzie). W takim przypadku możesz użyć tutaj prawie wszystkich innych odpowiedzi.
Oprócz
zaakceptowanej odpowiedzi, która jest po prostu błędna (czy różnica między a wynosi -1)?
Oto mój hit w matematycznym i szybkim podejściu, które bierze pod uwagę różne długości miesięcy i lata przestępne. Takiej funkcji powinieneś używać tylko wtedy, gdy będziesz ją stosować do zbioru danych (wykonując te obliczenia więcej & amp; razy). Jeśli musisz to zrobić tylko raz, użyj iteracyjnego podejścia Jamesa powyżej, ponieważ delegujesz wszystkie (wiele) obsługi wyjątków do obiektu Date ().
Anonimowy użytkownik
Potwierdzenie od:
http://ggomeze.com/2011/12/07/ ... cript
ty i inne podejście z mniejszą liczbą pętli:
Anonimowy użytkownik
Potwierdzenie od:
Nadawanie
daty rozpoczęcia
jako pierwszy lub ostatni, to przełączanie awaryjne. Oznacza to, że funkcja nadal zwraca tę samą wartość.
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Na przykład:
data 1: 24.09.2015
(24 września 2015)
data 2: 11.09.2015
(9 listopada 2015)
różnica: 2,5 (miesiące)
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
}
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Liczba miesięcy, w których dzień & amp; czas nie ma znaczenia
>
W tym przypadku nie interesują mnie pełne miesiące, niepełne miesiące, jak długo trwa miesiąc itp. Muszę tylko znać liczbę miesięcy.
Istotnym przypadkiem w prawdziwym świecie byłoby to, że raport musi być gotowy co miesiąc, a ja muszę wiedzieć, ile powinno ich być.
Przykład:
To jest szczegółowy przykład kodu, aby pokazać, gdzie idą liczby.
Weźmy 2 znaczniki czasu, które powinny zająć 4 miesiące
- Znacznik czasu 13 listopada 2019 roku: 1573621200000
- 20 lutego 2020 sygnatura czasowa: 1582261140000
Może się nieco różnić w przypadku ściągania strefy czasowej/czasu. Dzień, minuty i sekundy nie mają znaczenia i mogą być uwzględnione w sygnaturze czasowej, ale zignorujemy je w naszych rzeczywistych obliczeniach.Krok 1: Konwersja znacznika czasu na datę JavaScript
>
Krok 2: Uzyskaj wartości całkowite dla miesięcy/lat
>
To nam daje
Krok 3: dodaj do końca miesiąca.
>
Krok 4: odejmij miesiące
>
; otrzymujemy wynik za 4 miesiące.
Przykład 29 miesięcy
>
Listopad 2019-marzec 2022 to 29 miesięcy. Jeśli umieścisz je w arkuszu kalkulacyjnym programu Excel, zobaczysz 29 wierszy.
40 - 11 = 29
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
http://joda-time.sourceforge.net/faq.html#datediff
http://joda-time.sourceforge.net/faq.html#datediff
obliczyć różnicę między dwiema datami i zadzwonić do tej usługi z javascript.
Zakłada się, że Twoje zaplecze jest w Javie.