Converta o número de dias restantes em anos, meses, dias [duplicar]

Dec 14 2020

Estou tentando descobrir a diferença entre duas datas (meu aniversário e a data atual para obter o tempo que falta até meu aniversário), mas quero o formato de saída em ('Ano / Meses / Dias); Como eu posso fazer isso? foi o que tentei até agora:

 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);`

Agradeço antecipadamente

Respostas

AirSquid Dec 14 2020 at 00:06

Como você se sente em relação ao operador de módulo? :)

Esta é uma operação matemática comum, como encontrar uma mudança ou algo assim. Pense nisso desta forma, se você tiver um grande número de dias, digamos 397, você pode obter o número de anos fazendo a divisão inteira (1), então você pode obter o número de dias restantes ao fazer o módulo por um ano para obter o restante (em dias) 397% 365 = 32. Então, você pode repetir o processo para obter o número de meses restantes (1 ... assumindo mês de 30 dias) nesse e novamente, módulo para obter o número final de dias 2 ...

Não sou javascript pro, mas acho que você precisa usar Math.floor (quociente) para obter o resultado da divisão em formato inteiro.

nabil497 Dec 14 2020 at 00:07

este exemplo compara entre a data atual e a data 2100/0/14, tente o mesmo conceito do exemplo e espero que ajude:

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

Trabalhar com datas e diferenças pode ser difícil porque existem muitos casos extremos. é por isso que prefiro deixar uma biblioteca dedicada lidar com isso, comohttps://momentjs.com/

momento tem um plugin (https://www.npmjs.com/package/moment-precise-range-plugin) que faz exatamente o que você está procurando:

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'