If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React, { useCallback, useMemo, useState } from 'react';
import DateBox, { DateBoxTypes } from 'devextreme-react/date-box';
import service from './data.ts';
const dateTimeLabel = { 'aria-label': 'Date Time' };
const dateLabel = { 'aria-label': 'Date' };
const timeLabel = { 'aria-label': 'Time' };
const disabledLabel = { 'aria-label': 'Disabled' };
const pickerLabel = { 'aria-label': 'Picker' };
const clearLabel = { 'aria-label': 'Clear' };
const customFormatLabel = { 'aria-label': 'Custom Format' };
const birthDateLabel = { 'aria-label': 'Birth Date' };
function App() {
const [value, setValue] = useState(new Date(1981, 3, 27));
const now = new Date();
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
const disabledDates = service.getFederalHolidays();
const diffInDay = useMemo(
() =>
`${Math.floor(
Math.abs((new Date().getTime() - value.getTime()) / (24 * 60 * 60 * 1000)),
)} days`,
[value],
);
const onValueChanged = useCallback((e: DateBoxTypes.ValueChangedEvent) => {
setValue(e.value);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Date</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={dateLabel}
type="date"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Time</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={timeLabel}
type="time"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date and time</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={dateTimeLabel}
type="datetime"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Custom format</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={customFormatLabel}
displayFormat="EEEE, MMM dd"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date picker</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={pickerLabel}
pickerType="rollers"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Clear button</div>
<div className="dx-field-value">
<DateBox
defaultValue={dateClear}
type="time"
inputAttr={clearLabel}
showClearButton={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
type="datetime"
inputAttr={disabledLabel}
disabled={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disable certain dates</div>
<div className="dx-field-value">
<DateBox
defaultValue={firstWorkDay2017}
type="date"
pickerType="calendar"
inputAttr={disabledLabel}
disabledDates={disabledDates}
/>
</div>
</div>
</div>
<div className="dx-fieldset">
<div className="dx-fieldset-header">Event Handling</div>
<div className="dx-field">
<div className="dx-field-label">Set Birthday</div>
<div className="dx-field-value">
<DateBox
applyValueMode="useButtons"
value={value}
min={min}
max={now}
inputAttr={birthDateLabel}
onValueChanged={onValueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-value">
Your age is <div id="age">{diffInDay}</div>
</div>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React, { useCallback, useMemo, useState } from 'react';
import DateBox from 'devextreme-react/date-box';
import service from './data.js';
const dateTimeLabel = { 'aria-label': 'Date Time' };
const dateLabel = { 'aria-label': 'Date' };
const timeLabel = { 'aria-label': 'Time' };
const disabledLabel = { 'aria-label': 'Disabled' };
const pickerLabel = { 'aria-label': 'Picker' };
const clearLabel = { 'aria-label': 'Clear' };
const customFormatLabel = { 'aria-label': 'Custom Format' };
const birthDateLabel = { 'aria-label': 'Birth Date' };
function App() {
const [value, setValue] = useState(new Date(1981, 3, 27));
const now = new Date();
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
const disabledDates = service.getFederalHolidays();
const diffInDay = useMemo(
() =>
`${Math.floor(
Math.abs((new Date().getTime() - value.getTime()) / (24 * 60 * 60 * 1000)),
)} days`,
[value],
);
const onValueChanged = useCallback((e) => {
setValue(e.value);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Date</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={dateLabel}
type="date"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Time</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={timeLabel}
type="time"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date and time</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={dateTimeLabel}
type="datetime"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Custom format</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={customFormatLabel}
displayFormat="EEEE, MMM dd"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date picker</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
inputAttr={pickerLabel}
pickerType="rollers"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Clear button</div>
<div className="dx-field-value">
<DateBox
defaultValue={dateClear}
type="time"
inputAttr={clearLabel}
showClearButton={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<DateBox
defaultValue={now}
type="datetime"
inputAttr={disabledLabel}
disabled={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disable certain dates</div>
<div className="dx-field-value">
<DateBox
defaultValue={firstWorkDay2017}
type="date"
pickerType="calendar"
inputAttr={disabledLabel}
disabledDates={disabledDates}
/>
</div>
</div>
</div>
<div className="dx-fieldset">
<div className="dx-fieldset-header">Event Handling</div>
<div className="dx-field">
<div className="dx-field-label">Set Birthday</div>
<div className="dx-field-value">
<DateBox
applyValueMode="useButtons"
value={value}
min={min}
max={now}
inputAttr={birthDateLabel}
onValueChanged={onValueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-value">
Your age is <div id="age">{diffInDay}</div>
</div>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
const federalHolidays = [
new Date(2017, 0, 1),
new Date(2017, 0, 2),
new Date(2017, 0, 16),
new Date(2017, 1, 20),
new Date(2017, 4, 29),
new Date(2017, 6, 4),
new Date(2017, 8, 4),
new Date(2017, 9, 9),
new Date(2017, 10, 11),
new Date(2017, 10, 23),
new Date(2017, 11, 25),
];
export default {
getFederalHolidays() {
return federalHolidays;
},
};
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
const federalHolidays = [
new Date(2017, 0, 1),
new Date(2017, 0, 2),
new Date(2017, 0, 16),
new Date(2017, 1, 20),
new Date(2017, 4, 29),
new Date(2017, 6, 4),
new Date(2017, 8, 4),
new Date(2017, 9, 9),
new Date(2017, 10, 11),
new Date(2017, 10, 23),
new Date(2017, 11, 25),
];
export default {
getFederalHolidays() {
return federalHolidays;
},
};
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
#age {
display: inline-block;
}
This demo illustrates the following DateBox properties:
-
value
A value the DateBox displays. -
type
Specifies whether the DateBox allows users to select one of the following types:-
"date"
Users can select the date from the calendar, or they can type in their own date value (in the required format). -
"time"
Users can select a time from a range between 12:00 AM and 11:30 PM at 30-minute intervals, or they can type in their own time value (in the required format). Specify the interval property to set the time interval. -
"datetime"
Users can select the date from the calendar and the time from the spin and dropdown editors. They can also choose the Today button.
-
-
displayFormat
A date/time display format. You can use one of the predefined formats or specify a custom format. This demo illustrates the latter. -
pickerType
Specifies the type of UI used to select a date or time. This demo shows how to change a calendar to a roller date picker. -
showClearButton
Specifies whether to display the button that clears the DateBox value. -
disabled
Specifies whether the DateBox responds to user interaction. -
disabledDates
Dates that are not available for selection. -
applyValueMode
Defines whether the selected value applies instantly or after a user clicks the Apply button.
To get started with the DevExtreme DateBox component, refer to the following tutorial for step-by-step instructions: Getting Started with DateBox.