Numlex Documentación
Referencia de sintaxis

Fechas y horas

La referencia temporal completa: fechas, aritmética de duraciones, relojes, zonas horarias, marcas de tiempo/ISO, Timespan, timecode de vídeo, calendarios laborales y fechas especiales.

Numlex trata las fechas y las horas como magnitudes de primera clase con una gramática estricta y acotada. Una línea coincide exactamente con un patrón de fecha u hora o se queda como prosa normal: May 5 + 3 weeks funciona, May 5 + 43 es un error y una palabra de mes suelta no es una fecha. La aritmética de calendario es por componentes sobre el calendario gregoriano local, así que los cambios de horario de verano no pueden desplazar un día.

Esta página es la referencia temporal completa: fechas de calendario, aritmética de duraciones, relojes y laptime, zonas horarias, marcas de tiempo e ISO 8601, la notación Timespan, timecode de vídeo y fotogramas, calendarios laborales, fechas especiales, sus dependencias de Ajustes y las reglas estrictas de error.

Fechas de calendario

<date> [ <sign> <integer> <duration> ... ]
<date>     := today | tomorrow | yesterday
             | <month> <day>
             | <month> <day>, <year>
             | <day> <month> [<year>]
<duration> := day(s) | week(s) | month(s) | year(s)

Todas las palabras son inglesas y no distinguen mayúsculas; el signo es + o − (el - ASCII también vale). Meses, abreviados y completos:

#AbreviaturasNombre completo
1janjanuary
2febfebruary
3marmarch
4aprapril
5maymay
6junjune
7juljuly
8augaugust
9sep, septseptember
10octoctober
11novnovember
12decdecember

today, tomorrow y yesterday se resuelven contra la fecha local capturada y se combinan con duraciones. Los periodos compuestos se aplican componente a componente del calendario: March 12 + 3 weeks 2 days → Apr 4, May 10 - 1 week 3 days. Cada componente está limitado a 1.000.000.

El resultado muestra el año cuando la entrada lo especificaba o cuando queda fuera del año de entrada. El ancla es el mediodía local, así que los cambios de DST nunca mueven el día.

today                       → today (per the local calendar)
tomorrow + 1 month
yesterday - 2 weeks
May 5                       → May 5 (current year)
May 5, 2026 + 30 days       → Jun 4, 2026
5 May 2026
dec 31

Errores de sintaxis de fechas:

  • Los periodos de más de 1.000.000 son un error silencioso.
  • Feb 30 tiene forma de fecha pero no es válida: error silencioso.
  • May 5 + 43 (un número sin palabra de duración) es un error, nunca se reduce a aritmética normal.
  • May 5 + 43 days extra — cola tras una fecha válida — es un error.
  • Una palabra de mes suelta (may) no es una fecha; se queda como prosa.

Aritmética de duraciones

Varias unidades de tiempo fijas seguidas se leen como una sola duración:

  • 1 h 45 min, 1 hour 45 minutes, 2 hr 5 mins, 1 day 2 hours 30 min, 1 min 250 ms, 1 week 2 days.
  • Formas pegadas seguras: 1h45min, 45min, 30sec, 500ms, 2hr, 2wks, 1day2hours30min. Los alias pegados salen solo de una lista blanca (ms s sec secs second(s) min mins minute(s) h hr hrs hour(s) day(s) week(s) wk wks); una m pegada suelta nunca son minutos (5m = 5.000.000, 5 m = metros) y una s pegada suelta no se acepta.
  • Las duraciones compuestas usan las unidades fijas de ms a week. Las unidades calendáricas medias (mo, yr, quarter (time)) y las unidades ajenas no se componen implícitamente: 1 m 20 cm es un error y 1 mo 2 days no se compone.

Los componentes pueden ir en cualquier orden y repetirse; los valores se suman. El grupo se liga en un único operando primario antes de multiplicar o dividir:

1 h 30 min / 3        → 30 min        (not 1 h 10 min)
(1 h 20 min) × 2      → 2 h 40 min
3 × (1 h 15 min)      → 3 h 45 min
1 h 45 min + 30 min   → 2 h 15 min
2 hr 10 min - 45 min  → 1 h 25 min
1 day 2 h + 90 min    → 1 day 3 h 30 min
1 week 2 days - 1 day → 1 week 1 day
2 min 30 sec × 3      → 7 min 30 s
1 min 250 ms + 750 ms → 1 min 1 s
1.5 h + 30 min        → 2 h

Una duración sigue siendo una magnitud tipada real (dimensión T¹, una unidad de tiempo real, su valor en esa escala), no una cadena ni segundos adimensionales. Los paréntesis, el menos unario, las variables y las constantes que contienen tiempo funcionan (focus time = 1 h 30 min, luego focus time + 15 min = 1 h 45 min), y las duraciones se pueden tokenizar como otras magnitudes.

La salida usa una descomposición canónica natural (semanas, días, horas, minutos, segundos; milisegundos para un resto subsegundo), omite los componentes cero, normaliza los acarreos e imprime un solo signo: 2 h 15 min, 1 day 3 h 30 min, 7 min 30 s, -30 min, 500 ms. Una conversión explícita reinicia la forma natural a un resultado de una sola unidad: 1 h 30 min to min = 90 min, 1 h 30 min in hours = 1.5 h, 1 h 30 min as seconds = 5400 s.

Las velocidades y unidades derivadas nunca se convierten en duración (90 km / 3 h = 30 km/h), y la sintaxis de fechas mantiene la prioridad (May 5 + 2 days es una fecha). Las duraciones no tienen controles de notación ni de redondeo por respuesta.

Relojes y laptime

La sintaxis de reloj se comprueba antes de las unidades mixtas y las fechas:

3:30pm + 2 hours 15 minutes  → 5:45 pm
3:30pm - 2 hours 15 minutes  → 1:15 pm
11:30pm + 45 min             → Tomorrow 12:15 am
now + 3 hours 25 minutes     → local wall time + 3 h 25 min
01:02:03 + 01:09:54          → 02:11:57        (elapsed time / laptime)
00:00:01.5 + 00:00:01        → 00:00:02.50
7:30am to 8:45pm             → 13 h 15 min     (interval forward)
4pm to 3am                   → 11 h
3:30pm as laptime            → 15:30:00

Se aceptan h:mm, h:mm:ss, h am/pm y 4pm; AM/PM no distingue mayúsculas y puede ir pegado o separado por un espacio. Los minutos y segundos son 0…59, la hora de 12 horas es 1…12 y la de 24 horas es 0…23 (25:00 es un error estricto). La suma y la resta trabajan sobre componentes de pared, así que un cambio de DST nunca desplaza los minutos pedidos, y un cambio de día imprime Yesterday/Today/Tomorrow. clock + clock (3:30pm + 3:30pm) es un error estricto; un h:mm:ss suelto sin AM/PM sigue siendo tiempo transcurrido, no una hora del día. La presentación sigue la región: 12 horas para legacy/Norteamérica, 24 horas para Europa y el ciclo horario de la localización para System. Las filas de reloj se excluyen del Total, no tienen notación ni redondeo (solo Copy/Delete) y no pueden convertirse en tokens numéricos.

Zonas horarias

time in Paris                 → current time in the zone
Tokyo time                    → same, "<place> time" form
date in Vancouver             → date in the zone
6pm Sydney in Chicago         → 3:00 am
2am PST to GMT                → 10:00 am
3pm GMT+8 to Paris            → 9:00 am
7:30am LAX to Japan           → 11:30 pm
time difference between Chicago and Paris → 7 h
difference between PDT & AEST → 17 h

Una fuente se resuelve por el catálogo offline completo: identificadores y alias IANA, ciudades (con el calificador City, CC), nombres de países, códigos de país, códigos IATA/ICAO, abreviaturas fijas (EST/EDT/CST/CDT/MST/MDT/PST/PDT/AKST/AKDT/HST, AEST/AEDT/ ACST/ACDT/AWST/NZST/NZDT/BST/CET/CEST/EET/EEST/MSK/JST/KST/HKT/SGT) y GMT/UTC/GMT±H[:MM]. La hora de pared de la fuente se ancla a la fecha capturada en su zona, se convierte en un único instante absoluto y se muestra en la zona destino, de modo que A → B → A conserva el instante; los cambios reales de DST se respetan y una hora de origen inexistente es un error estricto. Un lugar desconocido en una línea de zona horaria es un error estricto. Un 6pm suelto, las fechas y las líneas geográficas se tratan por sus propias reglas. Los alias personalizados (Ajustes → Dates & Times) solo anulan nombres conocidos/identificadores IANA y viven en la app, nunca en .nlx.

Catálogo offline de zonas horarias

La app incluye un catálogo de zonas horarias (unos 1 MB): identificadores y alias IANA, ciudades con al menos 100.000 habitantes, país → zona de la capital e IATA/ICAO → zona. Los datos proceden de fuentes públicas (IANA tzdata, GeoNames, airportsdata) y se usan totalmente offline; no se necesita red.

Marcas de tiempo e ISO 8601

La sintaxis de marcas de tiempo se comprueba antes de las conversiones de unidades y del fallback normal de fechas:

current timestamp                    → 1,554,112,800   (number from captured now)
April 1, 2019 3:30pm as iso8601      → 2019-04-01T15:30:00+02:00
2019-04-01T15:30:00 to date          → Apr 1, 2019 3:30:00 pm
April 1, 2019 to timestamp           → 1,554,112,800
1559740303.48 to date                → Jun 5, 2019 3:11:43 pm
1733823083000 to date                → Dec 10, 2024 10:31:23 am

Los segundos son tiempo Unix desde 1970-01-01T00:00:00Z; se admiten valores fraccionarios finitos. Los valores de 1e12 o más se tratan como milisegundos (1733823083000 to date). Una fecha sin hora ligada a to timestamp se ancla al mediodía local (seguro ante DST). La forma ISO acepta Z, ±HH:MM, segundos opcionales y parte fraccionaria; un desplazamiento explícito se conserva como zona de presentación y, si no, se usa tu zona local. La salida ISO es yyyy-MM-dd'T'HH:mm:ssXXX; la salida de fecha y hora sigue el estilo regional de 12/24 horas con un orden inglés fijo (Apr 1, 2019 3:30 pm). Los valores inválidos, inexistentes (hueco de DST) y desbordados son errores estrictos. Las filas de fecha/ISO se excluyen de los Totales inline y de pie y de la cadena numérica Previous Answer; los tokens sobre ellas quedan inactivos con seguridad.

Timespan

La notación Timespan se elige globalmente (Numbers → Default answer format) o por respuesta (Number Format en el menú contextual) y se aplica solo a magnitudes de dimensión temporal; cualquier número no temporal cae en Automatic. El sufijo explícito as timespan funciona al margen del ajuste:

5.5 minutes as timespan   → 5 min 30 s
4.54 hours as timespan    → 4 hours 32 minutes 24 seconds
72 days as timespan       → 10 weeks 2 days
3 hours 5 minutes 10 seconds → 3 h 5 min 10 s
3h 5m 10s in seconds      → 11,110 s

El formateador descompone con avidez usando unidades medias yr = 365.2425 d y mo = 30.436875 d, luego semanas, días, horas, minutos, segundos y ms; imprime un decimal, omite los componentes cero y traslada el redondeo al componente mayor. Los yr/mo medios son solo factores lineales: la aritmética de calendario (+ 1 month) sigue usando componentes de Calendar. Gramática de unidades pegadas: dentro de una cadena de duración ya probada 3h 5m 10s, m y s significan minutos y segundos; 5m (5.000.000), 5 m (metros) y 10s sueltos no cambian. in seconds/in minutes/… reinicia a una presentación estándar de una sola unidad. La misma gramática tipada sirve a líneas normales, asignaciones y expresiones de Answer Token.

Timecode de vídeo y fotogramas

La sintaxis de timecode se comprueba antes de los relojes y las unidades mixtas:

03:10:20:05 at 30 fps + 50 frames        → 03:10:21:25
00:10:20:50 @ 60 fps + 10 minutes        → 00:20:20:50
00:30:10:00 @ 24 fps in frames           → 43,440 frames
43,440 frames @ 24 fps                   → 00:30:10:00
03:10:20:05 at 30 fps + 03:10:20:010     → 06:20:40:15
03:10:20:05 at 12 fps - 00:20:35:00      → 02:49:45:05
30 fps × 3 minutes                       → 5,400 frames
15.6k frames / 24 fps                    → 650 s

Los fotogramas se cuentan con exactitud (nunca con segundos redondeados): el fps es un entero de 1 a 1000, y no existe sintaxis drop-frame. Dentro de una expresión de timecode fps significa fotogramas por segundo; fuera de ella se mantiene el alias de velocidad anterior fps = ft/s. El FPS es obligatorio en toda operación; las frecuencias en conflicto, la falta de fps, los valores fuera de rango, el desbordamiento del recuento de fotogramas y los códigos rotos son errores estrictos. El campo de fotogramas normaliza los acarreos y se imprime con al menos dos dígitos (se acepta la entrada :010). Las filas de timecode y fotogramas se excluyen del Total, del redondeo y de la cadena numérica Previous Answer; los tokens sobre ellas están inactivos.

Calendarios laborales y festivos

Un día laborable es de lunes a viernes menos los festivos públicos de la región seleccionada. Los rangos de fechas son start-exclusive/end-inclusive; un año ausente usa el año actual capturado. Una región o un año no admitidos son un error estricto en lugar de saltarse los festivos en silencio.

workdays in 3 weeks                  → 15 workdays
10 March to 17 March in workdays     → 5 workdays
workdays from April 12 to June 15    → 44 workdays
$500/workday × 4 weeks               → $10,000.00
work hours in June                   → 6 day 16 h
work hours between March 12 and March 25 → 3 day
55h in work days                     → 6.875 workdays
December 24 + 2 workdays             → Dec 29

Alias: workday(s), work day(s), business day(s), weekday(s); la consulta weekday on <date> y la prosa normal no se capturan. Las semanas sin fecha cuentan cinco días laborables por semana. Las horas de trabajo son duraciones tipadas; una tarifa monetaria por día laborable conserva su forma de divisa; las horas por día laborable salen de Ajustes (1…24). Los festivos proceden del catálogo offline integrado (25 países, 2019–2035) y no se usa la red; una región o un año fuera del catálogo es un error.

Fechas especiales

Estas fechas especiales están integradas:

Easter               → Apr 20        (captured current year)
Easter 2027          → Mar 28, 2027
Christmas            → Dec 25
days until Christmas → 344 days
days until Easter    → 95 days
Easter 2027 + 2 days → Mar 30, 2027

La Pascua usa el cómputo gregoriano; la ocurrencia más cercana para days until toma la fecha de este año si aún está en el futuro y, si no, la del siguiente. Un nombre de festivo desconocido (days until Festivus) es un error estricto, y la prosa que contiene christmas/easter no se captura. Navidad es siempre el 25 de diciembre.

Dependencias de Ajustes

Las fechas y horas se calculan a partir de un único now capturado por hoja, el calendario gregoriano y la zona locales y el estilo horario regional (12/24): legacy/Norteamérica es de 12 horas, Europa occidental/oriental es de 24 horas y System sigue el ciclo horario de la localización.

Los ajustes de fecha y hora persistidos son:

  • Hours per workday (1…24, por defecto 8), usado por las horas de trabajo y las conversiones de días laborables.
  • Holiday region (automatic por defecto); los días laborables omiten los festivos públicos de esa región y las regiones no admitidas fallan estrictamente en consultas de días laborables con fecha.
  • Zonas horarias personalizadas, hasta 100, cada una con un nombre y un identificador IANA.

Estas preferencias son globales de la app y nunca entran en una exportación .nlx ni en una hoja. recalcula en cada pasada y nunca se guarda.

Totales, tokens y errores

  • Las filas de reloj, fecha, marca de tiempo/ISO y timecode se excluyen de los Totales inline y de pie, no tienen notación ni redondeo y no entran en la cadena numérica Previous Answer (los tokens sobre ellas quedan inactivos).
  • Las duraciones son magnitudes tipadas reales: se propagan por variables, constantes y tokens, y se comportan como otras magnitudes en las expresiones.
  • Los lugares desconocidos, las regiones/años laborales no admitidos, las fechas inválidas o inexistentes, las horas inválidas, la falta de fps y los valores desbordados son errores estrictos, nunca un número adivinado.

Relacionado

  • Unidades y cantidades — el catálogo de unidades, las unidades derivadas y los alias de velocidad con los mismos límites de unidades de tiempo.
  • Ajustes y apariencia — la categoría Dates & Times de la app y el ajuste de formato de respuesta en Numbers.
  • Cálculos naturales — ejemplos de fechas y horas en hojas cotidianas.

¿Has encontrado un error en esta documentación? Infórmalo en GitHub