<DateTimeInput>

An input for editing dates with time. <DateTimeInput> renders an <input type="datetime-local" > element, that most browsers display as date and time picker.

The appearance depends on the browser, and falls back to a text input on safari. The date formatting in this input depends on the user’s locale.

React-admin also proposes a DateTimeInput styled with Material UI documented at the end of this page.

Usage

import { DateTimeInput } from 'react-admin';

<DateTimeInput source="published_at" />

The input value must be a valid date string, i.e. a string understood by JavasSript’s Date.parse() method, or a Date object. Strings with the ISO 8601 format ‘yyyy-MM-ddThh:mm’ are the most common (e.g. '2022-04-30T12:30'). The field value may contain a timezone offset, e.g. '2022-04-30T12:30+02:00'. If no timezone is specified, the browser’s timezone is used.

After modification by the user, the value is stored as a Date object, using the browser’s timezone. When transformed to JSON, the date is serialized as a string in the ISO 8601 format (‘yyyy-MM-ddThh:mm’).

Tip: For a Material UI styled <DateTimeInput> component, check out MUI X Date Pickers

Props

<DateTimeInput> accepts the common input props.

Custom format and parse

Internally, <DateTimeInput> renders an <input type="datetime-local">.

If you need to implement your own format and parse functions, make sure the format function actually formats the input into a valid local date and time string.

Material UI

React-admin Enterprise Edition proposes an alternative <DateTimeInput> styled with Material UI.

DateTimeInput with Material UI

This input also allows to specify the date format and the locale used. It is based on the MUI X Date/Time pickers.

Usage

import { DateTimeInput } from '@react-admin/ra-form-layout';
import { Edit, SimpleForm } from 'react-admin';

export const EventEdit = () => (
    <Edit>
        <SimpleForm>
            <DateTimeInput source="event_date" />
        </SimpleForm>
    </Edit>
);

<DateTimeInput> will accept either a Date object or any string that can be parsed into a Date as value. It will return a Date object, or null if the date is invalid.

Tip: You can use the parse prop to change the format of the returned value. See Parsing the date/time as an ISO string for an example.

Props

Prop Required Type Default Description
fullWidth - boolean false If true, the input will expand to fill the form width
helperText - string - Text to be displayed under the input
mask - string - Alias for the MUI format prop. Format of the date/time when rendered in the input. Defaults to localized format.
parse - Function value => value === '' ? null : value Callback taking the input value, and returning the value you want stored in the form state.
validate - Function or Array - Validation rules for the input. See the Validation Documentation for details.

Except for the format prop (renamed mask), <DateTimeInput> accepts the same props as the MUI X Date/Time pickers. They also accept the common input props.

Providing your own LocalizationProvider

MUI X Pickers need to be wrapped in a LocalizationProvider to work properly. <DateTimeInput> already includes a default <LocalizationProvider> using the date-fns adapter and the enUS locale.

You can change the locale and the date format globally by wrapping the <Admin> with your own <LocalizationProvider>.

Here is how to set up the pickers to use the fr locale:

import { Admin, Resource } from 'react-admin';
import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import { fr } from 'date-fns/locale';
import { EventEdit } from './events';

export const App = () => (
    <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={fr}>
        <Admin>
            <Resource name="events" edit={EventEdit} />
        </Admin>
    </LocalizationProvider>
);

Note: React Admin only supports the date-fns adapter for now.

Parsing the date/time as an ISO string

By default, <DateTimeInput> stores the date/time as a Date object in the form state. If you wish to store the date/time as an ISO string instead (or any other format), you can use the parse prop.

<DateTimeInput
    source="published"
    parse={(date: Date) => (date ? date.toISOString() : null)}
/>