Somar duas durações ISO 8601
Digite duas durações ISO 8601 e receba a soma como uma única duração limpa: P1W mais P3D dá P10D, porque cada semana vira sete dias. Segundos, minutos, horas e meses são transportados, e unidades zeradas somem. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Duração 1
- P1Y2M3DT4H5M6S
- Duração 2
- P2Y1M10DT1H55M54S
- Sum
- P3Y3M13DT6H1M
- Anos
- 3
- Meses
- 3
- Dias
- 13
Strings de duração ISO 8601 como P1Y2M3DT4H5M6S aparecem em APIs, calendários, acordos de nível de serviço e arquivos de configuração sempre que um intervalo de tempo deve ser escrito sem ancorar a uma data de calendário. Somar duas dessas strings à mão é propenso a erros: semanas precisam virar dias, segundos precisam carregar para minutos e meses para anos, sem inventar uma conversão de dias em meses que dependa de uma data de início. Esta calculadora para somar duas durações ISO 8601 aceita duas strings não negativas, analisa cada designador em ordem fixa, expande semanas em blocos de sete dias, soma cada componente e devolve uma duração normalizada mais os campos de ano, mês, dia, hora, minuto e segundo.
O que significa somar durações ISO 8601
Uma duração ISO 8601 descreve um comprimento de tempo com os designadores Y para anos, M para meses, W para semanas, D para dias e, após um marcador T, H para horas, M para minutos e S para segundos. Valores típicos incluem P1Y para um ano, P2M15D para dois meses e quinze dias, PT1H30M para noventa minutos escritos como uma hora e trinta minutos, e a forma completa P1Y2M3DT4H5M6S. Somar duas durações é um problema componente a componente: anos somam a anos, meses a meses, e assim por diante.
Semanas são expandidas em dias com o fator fixo sete, de modo que P1W mais P3D vira P10D em vez de uma string mista de semanas e dias. Após a soma, o motor normaliza por carregamento os campos de tempo e mês com regras inteiras determinísticas: sessenta segundos viram um minuto, sessenta minutos uma hora, vinte e quatro horas um dia e doze meses um ano.
Dias nunca são convertidos em meses porque a duração do mês depende de uma data de início de calendário que esta ferramenta deliberadamente não recebe. O resultado é uma string canônica que omite designadores zero, usa P0D quando todos os componentes são zero e nunca emite um T isolado sem campos de tempo.
Onde combinar duas durações ISO vale a pena
Equipes de produto e plataforma combinam períodos de locação, extensões de trial e janelas de manutenção já armazenados como durações ISO em sistemas de configuração ou faturamento; somar P1Y a P3M deve resultar em P1Y3M sem aproximações de dias em ponto flutuante. Educadores e autores de documentação demonstram a aritmética de durações ao lado de tabelas RFC e ISO sem números seriais de planilha que silenciosamente incluem hora do dia.
Scripts de operações mesclam janelas de retenção de backup ou backoffs de retry expressos como strings PnD e PTnH de duas fontes e gravam um único valor normalizado em um registro. Mantenha ambas as strings pequenas, fixe sum e os campos de componentes nos testes, e você obtém soma de durações reproduzível para deveres, plugins LMS, edge workers e landings do catálogo que ranqueiam por somar duas durações ISO 8601 sem montar uma biblioteca de calendário completa.
Casos de uso
Faturamento e extensões de trial
Some a duração base de uma assinatura a uma janela de extensão (por exemplo P1Y mais P1M) e armazene a soma normalizada na configuração ou nas faturas.
Mesclar janelas de retenção e SLA
Combine duas durações de política de sistemas diferentes em uma string canônica PnYnMnDTnHnMnS para registros e runbooks.
Perguntas frequentes
Semanas são suportadas?
Sim. O designador W é aceito na entrada e convertido em sete dias antes da soma, de modo que P1W mais P3D vira P10D na soma normalizada.
Por que os dias não viram meses?
A duração do mês depende de uma data de início de calendário. Esta ferramenta soma durações puras sem data de referência, então os dias permanecem como dias enquanto os meses ainda carregam para anos de doze em doze.
Como somar duas durações ISO 8601?
Cada unidade é somada com a mesma unidade e depois o excesso passa para a seguinte. Por exemplo, P1Y2M3DT4H5M6S mais P2Y1M10DT1H55M54S dá P3Y3M13DT6H1M: minutos e segundos que chegam a 60 sobem para a unidade seguinte.
Posso usar valores negativos ou decimais?
Não. Cada duração precisa ser não negativa, com números inteiros e as letras na ordem padrão. Sinais de mais ou menos, frações, um P sozinho e letras fora de ordem são recusados em vez de adivinhados.
Quais unidades são transportadas depois da soma?
Sessenta segundos viram um minuto, sessenta minutos uma hora, vinte e quatro horas um dia e doze meses um ano. Assim, somar 5 e 55 minutos acrescenta uma hora às horas.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/date/iso-duration-add \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"duration1":"P1Y2M3DT4H5M6S","duration2":"P2Y1M10DT1H55M54S"}'const res = await fetch("https://api.kit.forhosting.com/date/iso-duration-add", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"duration1": "P1Y2M3DT4H5M6S",
"duration2": "P2Y1M10DT1H55M54S"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/iso-duration-add",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"duration1": "P1Y2M3DT4H5M6S",
"duration2": "P2Y1M10DT1H55M54S"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/iso-duration-add", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"duration1":"P1Y2M3DT4H5M6S","duration2":"P2Y1M10DT1H55M54S"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"duration1":"P1Y2M3DT4H5M6S","duration2":"P2Y1M10DT1H55M54S"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/iso-duration-add", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"duration1": "P1Y2M3DT4H5M6S",
"duration2": "P2Y1M10DT1H55M54S"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.iso_duration_add",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
O que significa somar durações ISO 8601
Esse contrato corresponde ao que bibliotecas de validação e formulários de schema esperam ao verificar PnYnMnDTnHnMnS sem reanalisar texto livre.
Contrato de entrada, formato da resposta e erros
Cada valor deve ser uma duração ISO 8601 não negativa que siga a gramática ordenada de designadores PnYnMnWnDTnHnMnS apenas com componentes inteiros. Em caso de sucesso o corpo ecoa ambas as entradas como durações canônicas com semanas já expandidas em dias, a string sum após normalização completa por carregamento, os seis campos inteiros não negativos years, months, days, hours, minutes e seconds, e um breve lembrete da fórmula do algoritmo. Solicitações rejeitadas não são cobradas. Envie um corpo JSON com dois campos de string obrigatórios: duration1 e duration2. Sinais de mais ou menos no início são rejeitados para que a soma seja sempre um comprimento não negativo; strings vazias, P isolado, designadores fora de ordem, partes fracionárias e texto que não seja duração falham com invalid_input indicando o campo. Os aliases a, first, left e d1 mapeiam para duration1; b, second, right e d2 para duration2, para que planilhas e formulários reutilizem nomes de coluna curtos. Exemplo: duration1 igual a P1Y2M3DT4H5M6S e duration2 igual a P2Y1M10DT1H55M54S produzem sum P3Y3M13DT6H1M porque cinco minutos mais cinquenta e cinco minutos carregam uma hora, e seis segundos mais cinquenta e quatro permanecem abaixo de sessenta. Combine a execução gratuita no navegador nesta página com a API paga quando precisar da mesma soma dentro de um pipeline automatizado sem reimplementar parsers de duração em cada serviço.
Onde combinar duas durações ISO vale a pena
Como a implementação é parse pura de tier A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo e sem rede de saída, e a validação falha não consome saldo.
Casos de integração
Fixtures de CI para agendadores
Afirme que PT90M mais PT30M normaliza para PT2H em testes unitários sem depender de Date, de locales ou do relógio do host.
Perguntas técnicas
Como somar duas strings de duração ISO 8601?
Envie duration1 e duration2 como strings PnYnMnWnDTnHnMnS não negativas. A API expande semanas em dias, soma cada componente, normaliza por carregamento e devolve sum mais years, months, days, hours, minutes e seconds.
Quais entradas são rejeitadas?
Campos ausentes, strings vazias, P isolado, sinais iniciais, componentes fracionários, designadores fora de ordem e texto que não é duração falham com invalid_input e não são cobrados.
Quanto custa o somador de durações ISO?
A ferramenta do navegador é gratuita. Solicitações de API usam o saldo pré-pago do KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.