Utilidades de Fecha
El paquete headless exporta un conjunto de funciones de ayuda nativas para Date. Estas reemplazan la necesidad de bibliotecas como dayjs o date-fns: la biblioteca no tiene dependencias externas de fechas.
Todas las funciones son puras (devuelven nuevos objetos Date en lugar de mutar la entrada).
Importación
import { today, parseDate, startOf, endOf, add, subtract, isSame, isBefore, isAfter, diff, daysInMonth, setYear, setMonth, setDate, setHour, setMinute, setSecond, formatBasic,} from "react-date-range-picker-headless";Tipo DateUnit
La mayoría de las funciones aceptan un parámetro DateUnit:
type DateUnit = "year" | "month" | "week" | "day" | "hour" | "minute" | "second" | "millisecond";Funciones
today
Devuelve la fecha/hora actual.
const now = today(); // new Date()parseDate
Analiza un valor en un objeto Date. Devuelve new Date() si la entrada es falsy.
parseDate("2026-03-01"); // DateparseDate(1709251200000); // Date a partir de la marca de tiempoparseDate(existingDate); // ClonarparseDate(null); // new Date() (alternativa)Firma: parseDate(date?: Date | string | number | null): Date
startOf
Obtiene el inicio de una unidad de tiempo.
startOf(date, "day"); // 2026-03-01 00:00:00.000startOf(date, "month"); // 2026-03-01 00:00:00.000startOf(date, "year"); // 2026-01-01 00:00:00.000startOf(date, "week"); // Inicio de la semana (domingo por defecto)startOf(date, "week", 1); // Inicio de la semana (lunes)Firma: startOf(date: Date, unit: DateUnit, weekStartsOn?: number): Date
endOf
Obtiene el final de una unidad de tiempo.
endOf(date, "day"); // 2026-03-01 23:59:59.999endOf(date, "month"); // 2026-03-31 23:59:59.999endOf(date, "year"); // 2026-12-31 23:59:59.999Firma: endOf(date: Date, unit: DateUnit, weekStartsOn?: number): Date
add
Añade una cantidad de tiempo a una fecha.
add(date, 1, "day"); // Mañanaadd(date, 3, "month"); // 3 meses despuésadd(date, -1, "year"); // hace 1 añoadd(date, 2, "hour"); // 2 horas despuésManeja el desbordamiento de mes (p. ej., 31 de enero + 1 mes = 28 de febrero, no 3 de marzo).
Firma: add(date: Date, amount: number, unit: DateUnit): Date
subtract
Resta una cantidad de tiempo de una fecha. Equivalente a add(date, -amount, unit).
subtract(date, 7, "day"); // hace 7 díassubtract(date, 1, "month"); // hace 1 mesFirma: subtract(date: Date, amount: number, unit: DateUnit): Date
isSame
Comprueba si dos fechas son iguales en una unidad de precisión determinada.
isSame(date1, date2, "day"); // ¿Mismo día del calendario?isSame(date1, date2, "month"); // ¿Mismo mes?isSame(date1, date2, "year"); // ¿Mismo año?isSame(null, date2, "day"); // false (seguro para nulos)Firma: isSame(date1: Date | null | undefined, date2: Date | null | undefined, unit?: DateUnit): boolean
isBefore
Comprueba si la primera fecha es anterior a la segunda con una precisión determinada.
isBefore(date1, date2, "day"); // ¿Está date1 en un día anterior?isBefore(date1, date2); // Comparación de milisegundosFirma: isBefore(date1: Date, date2: Date, unit?: DateUnit): boolean
isAfter
Comprueba si la primera fecha es posterior a la segunda con una precisión determinada.
isAfter(date1, date2, "day"); // ¿Está date1 en un día posterior?Firma: isAfter(date1: Date, date2: Date, unit?: DateUnit): boolean
diff
Obtiene la diferencia entre dos fechas en una unidad determinada.
diff(date1, date2, "day"); // Número de días entrediff(date1, date2, "month"); // Número de meses entrediff(date1, date2, "year"); // Número de años entreFirma: diff(date1: Date, date2: Date, unit: DateUnit): number
daysInMonth
Obtiene el número de días en el mes de una fecha.
daysInMonth(new Date(2026, 1)); // 28 (Febrero 2026)daysInMonth(new Date(2026, 0)); // 31 (Enero 2026)Firma: daysInMonth(date: Date): number
setYear / setMonth / setDate / setHour / setMinute / setSecond
Establece una parte específica de una fecha, devolviendo un nuevo Date.
setYear(date, 2027); // Cambiar año a 2027setMonth(date, 5); // Cambiar a junio (índice 0)setDate(date, 15); // Cambiar al día 15setHour(date, 14); // Cambiar a las 2 PMsetMinute(date, 30); // Cambiar a :30setSecond(date, 0); // Cambiar a :00setYear y setMonth manejan el desbordamiento (p. ej., 29 de febrero en un año bisiesto, establecido en un año no bisiesto, se ajusta al 28 de febrero).
Firmas:
setYear(date: Date, year: number): DatesetMonth(date: Date, month: number): DatesetDate(date: Date, day: number): DatesetHour(date: Date, hour: number): DatesetMinute(date: Date, minute: number): DatesetSecond(date: Date, second: number): Date
formatBasic
Formatea una fecha usando una cadena de plantilla.
formatBasic(date, "YYYY-MM-DD"); // "2026-03-01"formatBasic(date, "YYYY/MM/DD HH:mm:ss"); // "2026/03/01 14:30:00"formatBasic(date, "M/D"); // "3/1"formatBasic(date, "hh:mm A"); // Nota: el token A no es compatible, use el período del hookTokens admitidos:
| Token | Salida | Ejemplo |
|---|---|---|
YYYY | Año de 4 dígitos | 2026 |
MM | Mes de 2 dígitos | 03 |
M | Mes (sin relleno) | 3 |
DD | Día de 2 dígitos | 01 |
D | Día (sin relleno) | 1 |
HH | Hora de 2 dígitos (24h) | 14 |
H | Hora (24h, sin relleno) | 14 |
hh | Hora de 2 dígitos (12h) | 02 |
h | Hora (12h, sin relleno) | 2 |
mm | Minuto de 2 dígitos | 30 |
m | Minuto (sin relleno) | 30 |
ss | Segundo de 2 dígitos | 05 |
s | Segundo (sin relleno) | 5 |
Firma: formatBasic(date: Date, format: string): string