Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Fecha y hora

Fechas y hora · DateTimePicker · .amset-datetime

Qué es y cuándo usarlo

La fecha y la hora juntas, en un solo campo: el calendario de DatePicker y los segmentos de TimeField dentro de un grupo con nombre. El valor es una sola cadena, 2026-10-15T09:30, que es lo que entiende un <input type="datetime-local">, el servidor y new Date.

Cuándo usarlo

  • Una cita, un vencimiento, el inicio de un turno: cualquier cosa que ocurre en un día y a una hora.
  • Solo se avisa con la fecha y la hora enteras (onChange): media fecha no es un valor.
  • min y max (mismo formato) acotan los días; isDateUnavailable apaga días sueltos (festivos, días completos).
  • Con name viaja en un formulario nativo como un único campo.

Cuándo no

  • Solo el día: DatePicker. Solo la hora: TimeField. Un hueco dentro de una agenda: SlotPicker.
  • Un periodo (de-a): DateRangePicker.

Teclado: el de cada parte: los segmentos se escriben y se mueven con las flechas, el calendario se abre con su botón. Un grupo fieldset con su leyenda lo une para el lector de pantalla.

Accesibilidad: el nombre del grupo es la etiqueta; «Fecha» y «Hora» nombran cada parte. Al salir del grupo con solo una de las dos, un role="alert" dice qué falta. El error del servidor (error) manda sobre el que calcula el campo.

Aspecto fino: --amset-datetime-gap (hueco entre fecha y hora), más las variables de los campos (--amset-field-*) y del calendario (--amset-calendar-*).

Cómo se ve

Recogida en tienda
1730

De lunes a sábado

Recogida elegida: 2026-11-20, 17:30.

Entrega (a partir de hoy)
––––

<DateTimePicker label="Recogida en tienda" value={valor} onChange={setValor} hint="De lunes a sábado" />
<DateTimePicker label="Entrega (a partir de hoy)" value={vacio} onChange={setVacio} min="2026-10-20T00:00" required />

Props

Se importa con import { DateTimePicker } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
labelobligatoriastringObligatoria: nombra el grupo de los dos campos.
classNamestringSe une a las clases de la biblioteca, no las sustituye.
disabledboolean—
errorstringError de fuera (del servidor). Manda sobre el que calcula el campo.
firstDayOfWeekFirstDayOfWeek—
granularity"minute" | "second"Hasta donde llega la hora: `minute` (por defecto) o `second`.
hintstring—
initialValuestring | nullEl valor al empezar, sin controlarlo desde fuera.
isDateUnavailable(date: PlainDate) => boolean—
maxstringLo ultimo que se acepta, en el mismo formato. Solo se mira el dia.
minstringLo primero que se acepta, en el mismo formato. Solo se mira el dia.
namestringPara que viaje en un formulario nativo, como un unico campo.
onChange(value: string) => voidSolo se avisa con una fecha Y una hora enteras: `AAAA-MM-DDTHH:MM` (con `:SS` si `granularity` es `second`).
readOnlyboolean—
requiredboolean—
size"sm" | "md" | "lg"—
valuestring | nullLa fecha y la hora juntas, `AAAA-MM-DDTHH:MM`, controladas desde fuera. `null` es vacio.
variantFieldVariant—

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

Mandos

Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.

VariablePor defecto
--amset-datetime-gapvar(--amset-space-3)

Cómo se cambia

.amset-datetime {
  --amset-datetime-gap: ...;
}

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: