Cada data normalizada para a meia-noite UTC
A diferença aparece como número de dias e desmembrada em anos, meses e dias. O desmembramento segue o calendário real em vez de dividir por 30, porque os meses não têm a mesma duração: do fim de fevereiro ao fim de março são 28 dias, mas um mês.
Toda a aritmética roda na meia-noite UTC. Calcular no horário local faz os dias de mudança durarem 23 ou 25 horas e desloca a resposta em um. Para um site usado em vários países isso não é hipótese.
Os dias úteis excluem os fins de semana automaticamente; os feriados são você quem informa, porque mudam de país para país e de ano para ano.
Se a data inicial conta ou não
Depende da finalidade. Para o intervalo entre duas datas, não. Para dias úteis ou internações, em que os documentos legais contam as duas pontas, sim. Um contrato que diz dentro de três dias pode significar qualquer uma das duas coisas.
Confira o tratamento de fim de mês na aritmética mensal. Um mês depois de 31 de janeiro é 28 de fevereiro, ou 29 em ano bissexto, porque 31 de fevereiro não existe.
Faixas de dias úteis acima de dez anos são recusadas. O método conta dia a dia, então faixas longas ficam lentas, e de todo modo listas de feriados tão distantes não são confiáveis.