Zamień liczbę pozostałych dni na lata, miesiące, dni [duplikat]

Dec 14 2020

Próbuję uzyskać różnicę między dwiema datami (moje urodziny i bieżąca data, aby uzyskać czas pozostały do ​​moich urodzin), ale chcę, aby format wyjściowy był w ('Rok / Miesiące / Dni); Jak mogę to zrobić? tego próbowałem do tej pory:

 const birthday = new Date ('11-20-2021').getTime();
 const today = new Date ().getTime();
 const dys = (1000*60*60*24);
 const months = (dys*30);
 let differance = birthday-today ; 
 const formatted = Math.round(differance/dys);
 console.log(formatted);`

z góry dziękuję

Odpowiedzi

AirSquid Dec 14 2020 at 00:06

Co sądzisz o operatorze modulo? :)

Jest to typowa operacja matematyczna, taka jak znajdowanie zmian itp. Pomyśl o tym w ten sposób, jeśli masz dużą liczbę dni, powiedzmy 397, możesz uzyskać liczbę lat, wykonując dzielenie liczb całkowitych (1), a następnie możesz uzyskać liczbę dni pozostałych, wykonując modulo o rok, aby uzyskać reszta (w dniach) 397% 365 = 32. Następnie możesz powtórzyć proces, aby uzyskać liczbę pozostałych miesięcy (1 ... zakładając 30-dniowy miesiąc) w tym i ponownie, modulo, aby uzyskać końcową liczbę dni 2 ...

Nie jestem javascript pro, ale myślę, że musisz użyć Math.floor (iloraz), aby uzyskać wynik dzielenia w formacie całkowitoliczbowym.

nabil497 Dec 14 2020 at 00:07

ten przykład porównuje aktualną datę z datą 2100/0/14. Wypróbuj tę samą koncepcję w przykładzie i mam nadzieję, że pomoże:

var today, someday, text;
today = new Date();
someday = new Date();
someday.setFullYear(2100, 0, 14);

if (someday > today) {
  text = "Today is before January 14, 2100.";
} else {
  text = "Today is after January 14, 2100.";
}
document.getElementById("demo").innerHTML = text;
dpwrussell Dec 14 2020 at 00:21

Praca z datami i różnicami może być trudna, ponieważ istnieje wiele przypadków skrajnych. dlatego wolę, aby zajmowała się tym dedykowana biblioteka, na przykładhttps://momentjs.com/

moment ma wtyczkę (https://www.npmjs.com/package/moment-precise-range-plugin), który robi dokładnie to, czego szukasz:

import moment from 'moment';
import 'moment-precise-range-plugin';

var m1 = moment('2014-01-01 12:00:00','YYYY-MM-DD HH:mm:ss');
var m2 = moment('2014-02-03 15:04:05','YYYY-MM-DD HH:mm:ss');
var diff = moment.preciseDiff(m1, m2, true); // {years : 0, months : 1, days : 2, hours : 3, minutes : 4, seconds : 5}
var str = `Years: ${diff.years}, Months: ${diff.months}, Days: ${diff.days} `; // 'Years: 0, Months: 1, Days: 2'