Para contar los días civiles entre fechas de publicación, compara sus fechas de calendario en lugar de dividir las horas transcurridas entre 24. En un Mac, Numbers permite trabajar con datos que solo contienen fechas; primero hay que interpretar las marcas de tiempo en una zona horaria elegida.
Esta guía usa fechas de publicación sintéticas y el calendario gregoriano. La pregunta que hay que responder es: «¿Cuántos días de calendario separan estas dos publicaciones?». El recuento predeterminado es una diferencia con signo: la misma fecha da cero y la fecha siguiente da uno.
¿Qué tipo de información de fecha tienes?
Elige el tipo de dato antes de calcular. Una fecha impresa en una publicación y una marca de tiempo que registra el instante de su publicación requieren preparaciones distintas.
| Entrada | Significado | Preparación |
|---|---|---|
2025-03-09 |
Una fecha civil: año, mes y día | Compárala directamente con otra fecha civil gregoriana |
2025-03-09T05:00:00Z |
Una marca de tiempo que identifica un instante | Conviértela en una fecha de la zona horaria de referencia que hayas elegido |
-05:00 |
Un desfase UTC | Describe la diferencia entre la hora local y UTC en un instante |
America/New_York |
Una zona horaria con nombre | Proporciona las reglas necesarias para interpretar fechas locales y cambios de desfase |
Un desfase y una zona con nombre contienen información distinta. El desfase asociado a una marca de tiempo no indica cuál será el desfase en otra fecha. Una zona con nombre proporciona las reglas que relacionan ambos, incluidos los cambios de horario de verano. Esta distinción se explica en RFC 9557, «Fecha y hora en Internet: marcas de tiempo con información adicional».
Para una hoja de cálculo de fechas de publicación, establece esta regla: conserva las fechas que ya se proporcionan como fechas civiles; deriva las fechas de las marcas de tiempo usando una única zona de referencia elegida expresamente. No asignes una medianoche y un desfase arbitrarios a un valor que solo contiene una fecha para poder restarlo.
Los estándares de calendario también distinguen las fechas de las fechas y horas. El estándar iCalendar define un valor DATE independiente que contiene componentes de calendario. Su forma serializada usa dígitos sin separadores; en esta guía se usan fechas con guiones para facilitar la lectura. Consulta RFC 5545, sección 3.3.4.
¿Por qué no funciona dividir los segundos transcurridos entre 86.400?
La diferencia entre fechas civiles mide el avance del calendario. La diferencia de tiempo transcurrido mide el intervalo entre dos instantes. Durante un cambio de horario de verano, esas cantidades no tienen por qué corresponder a 24 horas por cada incremento de fecha. RFC 5545 señala expresamente que una recurrencia nominal de un día puede durar más o menos de 24 horas cuando se produce un cambio de zona. Consulta su explicación de las recurrencias.
Considera dos pares sintéticos de fechas de publicación en America/New_York. Los cálculos siguientes usan la medianoche local en cada extremo. Los desfases siguen las reglas de la zona de Nueva York y sus transiciones en la base de datos de zonas horarias de IANA.
| Intervalo sintético de publicación | Desfase inicial | Desfase final | Horas transcurridas | Diferencia entre fechas civiles |
|---|---|---|---|---|
| 9–10 de marzo de 2025 | -05:00 |
-04:00 |
23 | 1 |
| 2–3 de noviembre de 2025 | -04:00 |
-05:00 |
25 | 1 |
Para el par de marzo, los instantes UTC correspondientes son 2025-03-09T05:00:00Z y 2025-03-10T04:00:00Z: hay 23 horas de diferencia. Al dividir ese intervalo entre 24 se obtiene aproximadamente 0.9583. Para el par de noviembre, el cálculo equivalente da aproximadamente 1.0417. Ninguno de esos valores decimales responde a la pregunta sobre el calendario.
En estos ejemplos, el redondeo puede ocultar el error, pero no establece una regla de recuento fiable. Dos publicaciones a las 11:55 p. m. y a las 12:05 a. m. de fechas consecutivas solo están separadas por diez minutos y, aun así, tienen una diferencia entre fechas civiles de uno. Primero extrae las fechas y luego calcula la diferencia.
¿Cómo se cuentan las fechas de publicación en Numbers?
Usa este método cuando ya tengas las fechas de publicación previstas. Apple documenta que DAYS(end-date, start-date) devuelve el número de días entre sus argumentos, incluido un resultado negativo cuando la fecha final es anterior a la inicial. Consulta la referencia de DAYS de Numbers.
Abre una hoja de cálculo de Numbers con una tabla vacía. Usa la fila 1 para los encabezados descriptivos y luego introduce, por separado, las siguientes fórmulas en la fila 2. Para introducir una fórmula, selecciona su celda, escribe = al principio, completa la expresión y pulsa Retorno. Estos son los pasos documentados por Apple para introducir fórmulas en Numbers para Mac.
| Celda | Encabezado de columna sugerido | Fórmula que debes introducir | Valor esperado |
|---|---|---|---|
A2 |
Fecha de publicación anterior | =DATE(2025,3,9) |
9 de marzo de 2025 |
B2 |
Fecha de publicación posterior | =DATE(2025,3,10) |
10 de marzo de 2025 |
C2 |
Días civiles de diferencia | =DAYS(B2,A2) |
1 |
Usar DATE construye los datos de entrada a partir del año, el mes y el día, en lugar de depender de cómo se interprete una cadena de texto ambigua. Apple recomienda esta función para interpretar las fechas de forma coherente en distintas configuraciones de formato, en su lista de funciones de fecha y hora.
Repite la comprobación en la fila 3 con =DATE(2025,11,2) en A3, =DATE(2025,11,3) en B3 y =DAYS(B3,A3) en C3. La respuesta vuelve a ser 1. Estás comparando las fechas de calendario proporcionadas, así que no hay que ajustar las horas transcurridas.
Para hacer un cálculo rápido sin celdas auxiliares, introduce =DAYS(DATE(2025,3,10),DATE(2025,3,9)) en una celda vacía. La versión con columnas separadas es más fácil de revisar y reutilizar con varios pares de fechas de publicación.
¿Quieres conocer la diferencia o contar las fechas de forma inclusiva?
La diferencia estándar no cuenta la fecha inicial como una unidad. Del 9 al 10 de marzo hay un día de diferencia. Si lo que necesitas es contar cuántas fechas se incluyen desde el 9 hasta el 10 de marzo, la respuesta es dos.
Para un intervalo inclusivo cuya fecha final sea igual o posterior a la inicial, usa =DAYS(B2,A2)+1. Comprueba el orden antes de aplicar esa fórmula. Una diferencia negativa es una señal útil de que las entradas podrían estar invertidas; calcular automáticamente el valor absoluto descartaría esa información.
La misma distinción se aplica a un intervalo de una sola fecha. La diferencia entre fechas es cero, mientras que el recuento inclusivo contiene una fecha. Decide qué resultado necesita tu hoja de cálculo y ponle el nombre correspondiente a la columna.
¿Qué ocurre si tus datos de entrada son marcas de tiempo?
Una marca de tiempo debe convertirse a la zona de referencia antes de eliminar la hora. Por ejemplo, 2025-03-10T00:30:00Z corresponde al 9 de marzo a las 8:30 p. m. en America/New_York, usando el desfase -04:00 de esa fecha. Copiar los primeros diez caracteres de la marca de tiempo seleccionaría la fecha UTC en lugar de la fecha de publicación en Nueva York.
La firma documentada de DAYS en Numbers acepta dos argumentos de fecha; no tiene un argumento para una zona con nombre. Úsala después de haber establecido las fechas previstas. Para realizar en un Mac un cálculo repetible con marcas de tiempo, Foundation proporciona las API de calendario necesarias.
A pesar de su nombre, Date de Foundation representa un instante independiente de cualquier calendario o zona horaria. Apple indica que los cálculos de calendario deben hacerse mediante Calendar. Consulta la documentación oficial de Date.
Para los cambios habituales de horario de verano, la secuencia de Foundation es: seleccionar el calendario gregoriano y la zona de referencia, encontrar el inicio del día local de cada extremo y luego solicitar la diferencia usando solo el componente de día. Apple documenta tanto startOfDay(for:) como dateComponents(_:from:to:).
Ejecuta un ejemplo completo de Foundation en Terminal
Este método opcional requiere tener instalado Swift. Abre Terminal y ejecuta swift --version para comprobarlo, tal como se describe en la guía de introducción de Swift. Si hace falta, Apple explica cómo instalar sus herramientas de línea de comandos con xcode-select --install; completa el cuadro de instalación antes de continuar. Consulta Instalación de las herramientas de línea de comandos.
Pega todo el bloque siguiente en Terminal. Contiene un programa completo y datos de entrada sintéticos. Analiza marcas de tiempo con desfases explícitos y sin fracciones de segundo. Apple documenta .withInternetDateTime para este formato de marca de tiempo en la referencia de opciones de ISO8601DateFormatter.
swift - <<'SWIFT'
import Foundation
let zoneID = "America/New_York"
guard let zone = TimeZone(identifier: zoneID) else {
fatalError("Unknown reporting zone: \(zoneID)")
}
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = zone
let parser = ISO8601DateFormatter()
parser.formatOptions = [.withInternetDateTime]
let samples = [
("Spring", "2025-03-09T00:00:00-05:00",
"2025-03-10T00:00:00-04:00"),
("Autumn", "2025-11-02T00:00:00-04:00",
"2025-11-03T00:00:00-05:00")
]
for (label, startText, endText) in samples {
guard let start = parser.date(from: startText),
let end = parser.date(from: endText) else {
fatalError("Could not parse timestamps for \(label)")
}
let startDay = calendar.startOfDay(for: start)
let endDay = calendar.startOfDay(for: end)
guard let days = calendar.dateComponents(
[.day], from: startDay, to: endDay
).day else {
fatalError("Could not calculate civil days for \(label)")
}
let hours = end.timeIntervalSince(start) / 3600
print("\(label): \(days) civil day(s), \(hours) elapsed hours")
}
SWIFT
El resultado esperado es el siguiente. Los ejemplos numéricos se comprobaron de forma independiente con cálculos de fechas; aquí se revisó el programa Swift, pero no se ejecutó en macOS.
Primavera: 1 día(s) civil(es), 23.0 horas transcurridas
Otoño: 1 día(s) civil(es), 25.0 horas transcurridas
Para adaptar el programa, sustituye las cadenas de marcas de tiempo y elige deliberadamente la zona de referencia. Los desfases de las marcas de tiempo identifican sus instantes; la zona del calendario determina las fechas locales en las que caen esos instantes. El programa se detiene si el analizador informa de un error, en lugar de sustituir la fecha actual o saltarse un registro.
El ejemplo acepta el formato indicado con desfase. Las fracciones de segundo requieren otras opciones del analizador. Tampoco implementa las anotaciones de zona entre corchetes de RFC 9557: proporciona la zona con nombre por separado, como se muestra, en lugar de suponer que esta configuración del analizador las admite.
¿Qué debes comprobar si el resultado parece incorrecto?
Haz estas comprobaciones en orden; cada una aborda una causa distinta de discrepancia.
- Confirma qué recuento se solicita. La diferencia entre fechas y el recuento inclusivo difieren en uno para un intervalo ascendente.
- Confirma los datos de entrada. Usa el año, el mes y el día reales en el caso de las publicaciones que solo proporcionan una fecha. No supongas que las marcas de tiempo importadas ya representan las fechas locales previstas.
- Confirma la zona de referencia. Convierte ambos instantes usando la misma zona elegida antes de extraer las fechas.
- Confirma la operación. Cuenta los días de calendario después de eliminar la influencia de la hora. Dividir el intervalo entre instantes entre
86,400responde a una pregunta sobre el tiempo transcurrido. - Confirma la dirección. Conserva el resultado negativo hasta determinar si se invirtieron las entradas anterior y posterior.
En el código de calendario, usa la API de inicio del día en lugar de suponer que cada día local comienza en una medianoche única. Apple documenta que startOfDay(for:) selecciona la primera medianoche si hay dos, o el primer momento que existe si no hay medianoche. Así se gestiona un caso límite que puede pasarse por alto al establecer manualmente la hora en cero. Consulta startOfDay(for:).
El ejemplo de Foundation contempla los cambios habituales de horario de verano. Para los cambios históricos que omiten una fecha local completa, primero especifica si la tarea cuenta las fechas gregorianas o los días locales que realmente existieron; son requisitos distintos. Si se pretende lo primero, conserva las fechas que solo contienen una fecha como etiquetas de calendario.
Para una hoja de cálculo de fechas de publicación, mantén simple el cálculo final: establece las dos fechas gregorianas previstas, conserva su orden y usa DAYS para obtener la diferencia. Si los datos de entrada son instantes, especifica la zona de referencia antes de calcular. Así, el resultado seguirá correspondiendo a las fechas de publicación incluso cuando el reloj cambie entre ellas.
Fuentes
DAYS — Apple.
Calcular valores usando datos de las celdas de una tabla en Numbers para Mac — Apple.
Lista de funciones por categoría — Apple.
RFC 9557: Fecha y hora en Internet: marcas de tiempo con información adicional — IETF.
RFC 5545: Especificación básica de objetos de calendario y programación de Internet (iCalendar) — RFC Editor.
Date — Apple.
startOfDay(for:) — Apple.
dateComponents(_:from:to:) — Apple.
formatOptions — Apple.
Introducción — Swift.org.
Instalación de las herramientas de línea de comandos — Apple.