Diferencia entre fechas y calculadora de edad
Muchas personas buscan cuántos días hay entre dos fechas y una edad fiable en años, meses y días. Esta herramienta responde ambas preguntas solo con reglas de calendario civil: sin husos horarios, sin días hábiles y sin redondeos ocultos. Obtiene los días totales, un desglose firmado de años, meses y días, y el par ordenado usado en el cálculo.
Ejecutar — gratis
Solo fechas civiles — sin reloj ni zona horaria
Cada entrada es un día de calendario en formato AAAA-MM-DD. El cálculo no consulta horas, cambios de horario de verano ni el reloj del servidor para la diferencia en sí. Así, el mismo par de fechas es estable en la herramienta gratuita del navegador y en el API. Los días inválidos como 2023-02-29 o 2024-04-31 se rechazan en lugar de ajustarse en silencio, de modo que un error de escritura no se convierta en un aniversario incorrecto.
Años, meses y días con una regla coherente de fin de mes
El desglose usa meses de calendario con ajuste al último día válido: sumar un mes a 2024-01-31 produce 2024-02-29, no un día inventado de marzo. Si un mes provisional se pasara de la fecha final, el algoritmo retrocede un mes y cuenta los días enteros restantes. Por eso, de 2024-01-31 a 2024-02-29 hay un mes y cero días, y de 2024-01-31 a 2024-02-28 hay cero meses y veintiocho días. Los días totales excluyen el día inicial: la misma fecha da cero.
El modo diferencia y el modo edad comparten el mismo oráculo
El modo diferencia compara date_from con date_to y devuelve total_days, years, months, days, sign y el par ordenado. El modo edad usa birthdate y una reference_date explícita para resultados deterministas; si omite la referencia en la herramienta gratuita, se emplea la fecha civil local del dispositivo. Numéricamente, la edad es la misma función que la diferencia con otros nombres de campo, de modo que una edad con referencia fija no puede discrepar de la diferencia de ese mismo par.
Resultados con signo cuando el orden se invierte
Si la fecha final es anterior a la inicial, la herramienta no intercambia las entradas en silencio. Conserva el orden enviado en los campos de eco y aplica signo negativo a los días totales y al desglose. Esa simetría cubre cumpleaños futuros, intervalos invertidos y comprobaciones automáticas que deben detectar un rango al revés sin un segundo camino de código.
Qué puede hacer con ella
Días entre hitos de un proyecto
Mida los días de calendario exclusivos entre el inicio y la entrega sin mezclar fines de semana, festivos ni husos horarios.
Edad civil para formularios y elegibilidad
Calcule años, meses y días respecto a una fecha de referencia fija para que revisiones y exportaciones sean reproducibles.
Aniversarios y bordes del 29 de febrero
Trate cumpleaños en 29 de febrero y pares de fin de mes con la misma regla de ajuste que en los meses ordinarios.
Comprobaciones automáticas de intervalos
Llame al API desde un flujo y guarde total_days junto al desglose firmado en los registros de auditoría.
Preguntas frecuentes
¿El recuento de días es inclusivo o exclusivo?
Exclusivo del día inicial. La misma fecha produce cero días totales; el día civil siguiente produce uno.
¿Cómo se trata el fin de mes?
Los meses se suman con ajuste al último día válido del mes destino y se corrigen si la fecha intermedia supera la fecha final. Los días enteros restantes completan el desglose.
¿Qué ocurre con el 29 de febrero en un año no bisiesto?
El aniversario de 2024-02-29 a 2025-02-28 es un año, cero meses y cero días según la regla de ajuste. Entradas inválidas como 2023-02-29 se rechazan.
¿En qué se diferencia de los días hábiles?
Esta capacidad cuenta la diferencia natural de calendario y la edad civil. Los días hábiles y festivos corresponden a otra herramienta y no se aplican aquí.
¿Puede ser negativo el resultado?
Sí. Cuando la fecha final precede a la inicial, total_days y los campos de años, meses y días llevan signo negativo sin intercambiar los valores enviados.
¿La calculadora es gratis en computadora y celular?
La página funciona localmente y gratis en navegadores de escritorio y celulares. La aplicación nativa llama al API y muestra la tarifa; la misma solicitud cuesta $0.002 con saldo prepago de KIT.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/date-diff \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"date_from":"2024-01-31","date_to":"2024-02-29"}'const res = await fetch("https://api.kit.forhosting.com/dev/date-diff", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"date_from": "2024-01-31",
"date_to": "2024-02-29"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/date-diff",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"date_from": "2024-01-31",
"date_to": "2024-02-29"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/date-diff", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"date_from":"2024-01-31","date_to":"2024-02-29"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"date_from":"2024-01-31","date_to":"2024-02-29"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/date-diff", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"date_from": "2024-01-31",
"date_to": "2024-02-29"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.date_diff",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
year_min | 1 |
year_max | 9999 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |