Chcę obliczyć różnicę daty w dniach, godzinach, minutach, sekundach, milisekundach, nanosekundach. Jak mogę to zrobić?
javascript
datetime
Farhan Siddiqui
źródło
źródło
Odpowiedzi:
Zakładając, że masz dwa
Date
obiekty , możesz je odjąć, aby uzyskać różnicę w milisekundach:Stamtąd możesz użyć prostej arytmetyki, aby uzyskać inne wartości.
źródło
Math.floor((date2 - date1) / (1000*60*60*24))
- dla różnicy w dowolnej innej jednostce, dostosuj mianownik (wartość bazowa jest w ms).Próbka kodu pobrana stąd .
źródło
Innym rozwiązaniem jest konwersja różnicy na nowy obiekt Date i uzyskanie daty roku (różni się od 1970), miesiąca, dnia itp.
Różnica jest jak „3 lata i 6 miesięcy i 4 dni”. Jeśli chcesz zmienić styl czytelny dla człowieka, może ci to pomóc.
źródło
Wyrażenia takie jak „różnica dni” nigdy nie są tak proste, jak się wydają. Jeśli masz następujące daty:
różnica w czasie wynosi 2 minuty, czy „różnica w dniach” powinna wynosić 1 czy 0? Podobne problemy pojawiają się przy wyrażaniu różnicy w miesiącach, latach lub cokolwiek innego, ponieważ lata, miesiące i dni mają różne długości i różne czasy (np. Dzień, w którym zaczyna się czas letni, jest o 1 godzinę krótszy niż zwykle i o dwie godziny krótszy niż dzień, w którym kończy się).
Oto funkcja różnicy dni, która ignoruje czas, tzn. Dla powyższych dat zwraca 1.
Może to być bardziej zwięzłe:
źródło
źródło
użyj Moment.js do wszystkich obliczeń daty i godziny związanych z JavaScript
Odpowiedź na twoje pytanie brzmi:
Pełne szczegóły można znaleźć tutaj
źródło
źródło
Z momentjs jest to proste:
źródło
źródło
Przepraszam, ale obliczenia z płaską milisekundą nie są wiarygodne. Dziękujemy za wszystkie odpowiedzi, ale niektóre z funkcji, które wypróbowałem, zawiodły: 1. Data w pobliżu dzisiejszej daty 2. Data w 1970 lub 3. Data w roku przestępnym.
Podejście, które najlepiej dla mnie działało i obejmuje wszystkie scenariusze, np. Rok przestępny, data zbliżona do 1970 r., 29 lutego itp.
źródło
Jeśli używasz pliku mom.js, łatwo jest znaleźć różnicę dat.
źródło
źródło
Myślę, że to powinno to zrobić.
źródło
W ten sposób można wprowadzić różnicę między datami bez ram.
źródło
źródło
Ok, możesz to zrobić na wiele sposobów. Tak, możesz użyć zwykłego starego JS. Spróbuj:
Naśladujmy fragment przy użyciu Date.prototype.setMinutes i upewnijmy się, że jesteśmy w zasięgu.
Alternatywnie możesz użyć biblioteki takiej jak js-joda , w której możesz łatwo robić takie rzeczy (bezpośrednio z dokumentów):
Jest o wiele więcej bibliotek ofc, ale js-joda ma dodatkową zaletę bycia dostępnym również w Javie, gdzie został gruntownie przetestowany. Wszystkie te testy zostały przeniesione do js-joda, jest również niezmienne.
źródło
powinno to działać dobrze, jeśli chcesz pokazać, ile czasu pozostało, ponieważ JavaScript używa ramek na swój czas, otrzymasz czas zakończenia - czas RN, po którym możemy go podzielić przez 1000, ponieważ najwyraźniej 1000 ramek = 1 sekunda, potem możesz użyć podstawowej matematyki czasu, ale kod nadal występuje problem, ponieważ obliczenia są statyczne, nie można zrekompensować całkowitej sumy dni w roku (360/365/366) JEŻELI po obliczeniach ma być zerowe, jeśli czas jest krótszy niż 0, mam nadzieję, że to pomaga, nawet jeśli nie jest to dokładnie to, o co pytasz :)
źródło