Calcular o número de semanas, dias e horas a partir de milissegundos

Havia muitas perguntas semelhantes, mas nenhuma abordava esse cálculo. Usando javascript i, é fácil encontrar o número de milissegundos diff b / w 2 datas para ex:

var mil = Math.floor(new Date("1/1/2012")  - new Date("1/7/2012"))

mil é atribuído518400000

para semanas eu faria abaixo

var weeks = mil / (1000*7*24*60*60);

no exemplo acima, ele se encaixa exatamente1 semana. Para outras entradas possíveis, gostaria de obter a saída como ex:

n Weeks, y days , z hours

Então eu fizmil % (1000*7*24*3600) para obter o módulo e, no restante, calcule o número de dias. mas surpreendentemente esta foi a resposta que recebi do console1 weeks , 6 days parece que a semana calculada antes também é contabilizada por dias novamente.

Como devo calculá-las corretamente?

questionAnswers(4)

yourAnswerToTheQuestion