Reference version

DateTimePicker

兼容 @react-native-community/datetimepicker 的日期和时间选择器。

Android
iOS
Bundled version:
~55.0.0-beta.0

For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

一个与 @react-native-community/datetimepicker API 兼容的 DateTimePicker 组件。它在 Android 上使用 Jetpack Compose,在 iOS 上使用 SwiftUI,默认提供现代的 Material 3 和 SwiftUI 外观(社区模块在 Android 上默认采用较旧的样式)。

DateTimePicker 组件是完全声明式的。使用 presentation 属性可以将选择器以 'inline' 的形式直接渲染在视图层级中,或在 Android 上以 'dialog' 的形式显示。没有 Android 的命令式 API(DateTimePickerAndroid.open())。

在底层,该组件封装了平台特定的 @expo/ui 原语:

如果你需要更低层级的控制(自定义修饰符、样式或布局),请直接使用这些原语。

安装

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

@react-native-community/datetimepicker 迁移

  • 将导入从 import DateTimePicker from '@react-native-community/datetimepicker' 更新为 import DateTimePicker from '@expo/ui/datetimepicker'
  • 没有命令式的 DateTimePickerAndroid.open() API。请渲染该组件并改用 presentation="dialog"
  • 不支持 minuteIntervaltextColorfirstDayOfWeekneutralButtononNeutralButtonPressfullscreentitlestartOnYearSelection 属性。
  • 使用 timeZoneName(IANA 名称)代替 timeZoneOffsetInMinutes
  • 不支持 countdown 模式。
  • 不需要 onError 属性。

基本用法

DateTimePickerExample.tsx
import { useState } from 'react'; import DateTimePicker from '@expo/ui/datetimepicker'; export default function DateTimePickerExample() { const [date, setDate] = useState(new Date()); return ( <DateTimePicker value={date} onValueChange={(event, selectedDate) => { setDate(selectedDate); }} mode="date" /> ); }

时间选择器

TimePickerExample.tsx
import { useState } from 'react'; import DateTimePicker from '@expo/ui/datetimepicker'; export default function TimePickerExample() { const [date, setDate] = useState(new Date()); return ( <DateTimePicker value={date} onValueChange={(event, selectedDate) => { setDate(selectedDate); }} mode="time" /> ); }

带日期限制

ConstrainedDatePickerExample.tsx
import { useState } from 'react'; import DateTimePicker from '@expo/ui/datetimepicker'; const today = new Date(); const thirtyDaysFromNow = new Date(today.getTime() + 30 * 24 * 60 * 60 * 1000); export default function ConstrainedDatePickerExample() { const [date, setDate] = useState(new Date()); return ( <DateTimePicker value={date} onValueChange={(event, selectedDate) => { setDate(selectedDate); }} mode="date" minimumDate={today} maximumDate={thirtyDaysFromNow} /> ); }

对话框展示

在 Android 上,你可以使用 presentation="dialog" 将选择器作为模态对话框显示。对话框会在组件挂载时打开。请在响应 onValueChangeonDismiss 时卸载它。在 iOS 上,此属性会被忽略,选择器始终以内联方式渲染。

AndroidDialogExample.tsx
import { useState } from 'react'; import { Button, View } from 'react-native'; import DateTimePicker from '@expo/ui/datetimepicker'; export default function AndroidDialogExample() { const [date, setDate] = useState(new Date()); const [show, setShow] = useState(false); return ( <View> <Button title="Pick a date" onPress={() => setShow(true)} /> {show && ( <DateTimePicker value={date} onValueChange={(event, selectedDate) => { setShow(false); setDate(selectedDate); }} onDismiss={() => { setShow(false); }} mode="date" presentation="dialog" /> )} </View> ); }

API

import DateTimePicker from '@expo/ui/datetimepicker';

Component

DateTimePicker

Android
iOS

Type: React.Element<DateTimePickerProps>

DateTimePickerProps

accentColor

Android
iOS
Optional • Type: string

Accent/tint color applied to the picker. Maps to color on Android and tint on iOS.

disabled

iOS
Optional • Type: boolean

Whether the picker is disabled.

display

Android
iOS
Optional • Literal type: string • Default: 'default'

Display style. Android supports 'default' | 'spinner''spinner' shows a text input rather than a scroll wheel (Material 3 does not have a wheel-style picker). iOS supports 'default' | 'spinner' | 'compact' | 'inline'.

Acceptable values are: 'default' | 'spinner' | 'compact' | 'inline' | 'calendar' | 'clock'

is24Hour

Android
Optional • Type: boolean

Use 24-hour format.

locale

iOS
Optional • Type: string

Locale identifier (e.g. 'en_US', 'fr_FR') for the picker display.

maximumDate

Android
iOS
Optional • Type: Date

The latest selectable date.

minimumDate

Android
iOS
Optional • Type: Date

The earliest selectable date.

mode

Android
iOS
Optional • Literal type: string • Default: 'date'

The picker mode.

Acceptable values are: 'date' | 'time' | 'datetime'

negativeButton

Android
Optional • Type: { label: string }

Set the negative (cancel) button label.

Deprecated: Use onValueChange and onDismiss instead.

onChange

Android
iOS
Optional • Type: (event: DateTimePickerEvent, date?: Date) => void

Called when the user changes the date/time or dismisses the picker. The event type is encoded in event.type. If the new specific listeners are provided, they take precedence.

onDismiss

Android
Optional • Type: () => void

Called when the picker is dismissed without selecting a value.

onValueChange

Android
iOS
Optional • Type: (event: DateTimePickerChangeEvent, date: Date) => void

Called when the user selects a date or time.

positiveButton

Android
Optional • Type: { label: string }

Set the positive (confirm) button label.

presentation

Android
Optional • Literal type: string • Default: 'dialog'

How the picker is presented.

  • 'inline' renders the picker directly in the view hierarchy.
  • 'dialog' shows a modal dialog that opens on mount. Fires onValueChange on confirmation, onDismiss on cancel. The caller should unmount the component in response.

On iOS this prop is accepted but ignored (always inline). On Android the default is 'dialog'.

Acceptable values are: 'inline' | 'dialog'

testID

Android
iOS
Optional • Type: string

A test ID forwarded to the native view. Note: on Android dialog presentation, the test ID is not forwarded.

themeVariant

iOS
Optional • Literal type: string

Force a specific color scheme on the picker.

Acceptable values are: 'dark' | 'light'

timeZoneName

iOS
Optional • Type: string

IANA time zone name (e.g. 'America/New_York') for the picker display.

value

Android
iOS
Type: Date

The current date value (controlled).

Inherited Props

Types

DateTimePickerChangeEvent

Android
iOS
PropertyTypeDescription
nativeEvent{ timestamp: number, utcOffset: number }
-

Deprecated: Used with the deprecated onChange prop.

DateTimePickerEvent

Android
iOS
PropertyTypeDescription
nativeEvent{ timestamp: number, utcOffset: number }
-
type'set' | 'dismissed'

'set' when the user selects a date. 'dismissed' when the user cancels an Android dialog picker. iOS never fires 'dismissed'.