react-native-date-picker
React Native Date Picker is datetime picker for Android and iOS. It includes date, time and datetime picker modes. The datepicker is customizable and is supporting different languages. It's written with native code to achieve the best possible look, feel and performance.
Top Related Projects
React Native date & time picker component for iOS, Android and Windows
A React-Native datetime-picker for Android and iOS
react native datePicker component for both Android and IOS, useing DatePikcerAndroid, TimePickerAndroid and DatePickerIOS
React Native Calendar Components 🗓️ 📆
Picker is a cross-platform UI component for selecting an item from a list of options.
🔽 A Picker component for React Native which emulates the native <select> interfaces for iOS and Android
Quick Overview
React Native Date Picker is a cross-platform date and time picker component for React Native applications. It provides a native UI for selecting dates and times on both iOS and Android platforms, offering a seamless and consistent user experience across devices.
Pros
- Cross-platform compatibility with native UI for iOS and Android
- Highly customizable with various styling options and modes
- Supports both date and time selection
- Easy to integrate into existing React Native projects
Cons
- Limited support for complex date formats or custom calendars
- May require additional configuration for certain localization features
- Some users report occasional issues with specific React Native versions
- Documentation could be more comprehensive for advanced use cases
Code Examples
- Basic usage of the date picker:
import DatePicker from 'react-native-date-picker'
export default () => {
const [date, setDate] = useState(new Date())
return (
<DatePicker
date={date}
onDateChange={setDate}
/>
)
}
- Time picker mode with custom style:
<DatePicker
mode="time"
date={date}
onDateChange={setDate}
textColor="red"
style={{ width: 300 }}
/>
- Date range selection with min and max dates:
<DatePicker
date={startDate}
onDateChange={setStartDate}
minimumDate={new Date()}
maximumDate={new Date(2025, 0, 1)}
/>
Getting Started
-
Install the package:
npm install react-native-date-picker
-
For iOS, run:
cd ios && pod install
-
Import and use in your React Native component:
import DatePicker from 'react-native-date-picker' export default function App() { const [date, setDate] = useState(new Date()) return ( <DatePicker date={date} onDateChange={setDate} mode="datetime" /> ) }
Competitor Comparisons
React Native date & time picker component for iOS, Android and Windows
Pros of datetimepicker
- Official React Native community package, ensuring better long-term support and compatibility
- Smaller bundle size, potentially improving app performance
- Closer to native look and feel on both iOS and Android platforms
Cons of datetimepicker
- Less customization options compared to react-native-date-picker
- Limited support for different date and time formats
- May require additional setup for certain use cases
Code Comparison
react-native-date-picker:
import DatePicker from 'react-native-date-picker'
<DatePicker
date={date}
onDateChange={setDate}
mode="datetime"
minimumDate={new Date()}
/>
datetimepicker:
import DateTimePicker from '@react-native-community/datetimepicker'
<DateTimePicker
value={date}
mode="datetime"
is24Hour={true}
display="default"
onChange={onChange}
/>
Both libraries offer similar basic functionality for date and time picking in React Native applications. react-native-date-picker provides more customization options and a unified API across platforms, while datetimepicker offers a more native look and feel with potentially better performance. The choice between the two depends on specific project requirements, such as the need for extensive customization versus a more platform-native appearance.
A React-Native datetime-picker for Android and iOS
Pros of react-native-modal-datetime-picker
- Offers a modal-based picker, which can be more user-friendly and less intrusive
- Provides a simpler API with fewer configuration options, making it easier to implement quickly
- Supports both iOS and Android platforms with a consistent look and feel
Cons of react-native-modal-datetime-picker
- Less customizable compared to react-native-date-picker, which offers more styling options
- Doesn't support as many locales or date formats as react-native-date-picker
- May have performance issues with larger datasets or complex configurations
Code Comparison
react-native-modal-datetime-picker:
<DateTimePickerModal
isVisible={isDatePickerVisible}
mode="date"
onConfirm={handleConfirm}
onCancel={hideDatePicker}
/>
react-native-date-picker:
<DatePicker
date={date}
onDateChange={setDate}
mode="date"
androidVariant="nativeAndroid"
/>
The code comparison shows that react-native-modal-datetime-picker uses a modal approach with visibility control, while react-native-date-picker is implemented as a standalone component. The former focuses on simplicity and ease of use, while the latter offers more direct control over the picker's appearance and behavior.
react native datePicker component for both Android and IOS, useing DatePikcerAndroid, TimePickerAndroid and DatePickerIOS
Pros of react-native-datepicker
- Lightweight and simple to use
- Supports both iOS and Android platforms
- Offers a wider range of customization options for date format and appearance
Cons of react-native-datepicker
- Less actively maintained, with fewer recent updates
- May have compatibility issues with newer React Native versions
- Limited support for time picking functionality
Code Comparison
react-native-datepicker:
<DatePicker
style={{width: 200}}
date={this.state.date}
mode="date"
placeholder="Select date"
format="YYYY-MM-DD"
minDate="2000-01-01"
maxDate="2025-12-31"
confirmBtnText="Confirm"
cancelBtnText="Cancel"
onDateChange={(date) => {this.setState({date: date})}}
/>
react-native-date-picker:
<DatePicker
date={this.state.date}
onDateChange={(date) => this.setState({date})}
mode="date"
/>
The react-native-datepicker offers more inline customization options, while react-native-date-picker provides a simpler, more streamlined API. The latter relies more on separate configuration props and follows a more modern React Native component structure.
React Native Calendar Components 🗓️ 📆
Pros of react-native-calendars
- More comprehensive calendar functionality, including agenda views and multi-day selection
- Highly customizable appearance and behavior
- Larger community and more frequent updates
Cons of react-native-calendars
- Steeper learning curve due to more complex API
- Larger package size, which may impact app performance
- Some users report issues with TypeScript definitions
Code Comparison
react-native-calendars:
<Calendar
onDayPress={(day) => {console.log('selected day', day)}}
markedDates={{
'2023-05-16': {selected: true, marked: true, selectedColor: 'blue'}
}}
/>
react-native-date-picker:
<DatePicker
date={new Date()}
onDateChange={(date) => {console.log('selected date', date)}}
mode="date"
/>
react-native-calendars offers more flexibility in terms of date selection and marking, while react-native-date-picker provides a simpler interface for basic date picking functionality. The choice between the two depends on the specific requirements of your project, with react-native-calendars being more suitable for complex calendar implementations and react-native-date-picker for straightforward date selection needs.
Picker is a cross-platform UI component for selecting an item from a list of options.
Pros of picker
- More general-purpose, supporting various types of pickers beyond just date selection
- Part of the official React Native community, potentially ensuring better long-term support and compatibility
- Lighter weight and simpler to implement for basic picker needs
Cons of picker
- Less specialized for date picking, may require more custom configuration for advanced date/time selection
- Fewer built-in features specific to date and time selection compared to react-native-date-picker
- May require additional styling and customization to achieve a polished date picker interface
Code Comparison
react-native-date-picker:
import DatePicker from 'react-native-date-picker'
<DatePicker
date={new Date()}
onDateChange={setDate}
mode="date"
/>
picker:
import {Picker} from '@react-native-picker/picker';
<Picker
selectedValue={selectedValue}
onValueChange={(itemValue, itemIndex) => setSelectedValue(itemValue)}
>
<Picker.Item label="Option 1" value="option1" />
<Picker.Item label="Option 2" value="option2" />
</Picker>
The code comparison shows that react-native-date-picker is more specialized for date picking, while picker requires more setup for date selection but offers greater flexibility for various picker types.
🔽 A Picker component for React Native which emulates the native <select> interfaces for iOS and Android
Pros of react-native-picker-select
- More versatile, supporting various types of data input beyond dates
- Lightweight and simple to implement for basic selection needs
- Customizable appearance with style props
Cons of react-native-picker-select
- Less specialized for date and time selection
- May require additional configuration for complex date-related use cases
- Limited built-in formatting options for date and time display
Code Comparison
react-native-picker-select:
<RNPickerSelect
onValueChange={(value) => console.log(value)}
items={[
{ label: 'Football', value: 'football' },
{ label: 'Baseball', value: 'baseball' },
{ label: 'Hockey', value: 'hockey' },
]}
/>
react-native-date-picker:
<DatePicker
date={date}
onDateChange={setDate}
mode="date"
/>
react-native-picker-select is more flexible for general selection tasks, while react-native-date-picker is specifically designed for date and time selection with built-in formatting and modes. The code comparison shows that react-native-picker-select requires more setup for items, while react-native-date-picker has a simpler API for date selection. Choose based on your specific needs: general selection or specialized date picking.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
React Native Date Picker
This is a React Native Date Picker with following main features:
ð± Supports iOS, Android and Expo
ð 3 different modes: Time, Date, DateTime
ð Various languages
ð¨ Customizable
ð¼ Modal or Inlined
Sponsors
Thanks to our sponsors ð©·
Expo | Nordic Brain Tech | hesenger | hamxahussain | lepadatumihail |
Modal
The first option is to use the built-in modal. See code.
iOS | Android |
Inlined
The second option is to use the inlined picker. Place it in a View or a custom made modal. See code.
iOS | Android |
Requirements
- Xcode >= 11.6
- React Native >= 0.57.
- If using React Native 0.64, 0.64.2 or later must be used.
- If using Expo, SDK 42 or later must be used. If using Expo SDK 44, 44.0.4 or later must be used.
Expo
- â You can use this library with Development Builds. No config plugin is required.
- â This library can't be used in the "Expo Go" app because it requires custom native code.
Installation
- Download package
# npm
npm install react-native-date-picker
# yarn
yarn add react-native-date-picker
# pnpm
pnpm add react-native-date-picker
- Install pods (skip for expo projects)
cd ios && pod install
- Rebuild the project
# expo projects
npx expo run:android
npx expo run:ios
# non-expo projects
npx react-native run-android
npx react-native run-ios
If you're having troubles after following these steps, there might be a linking issue.
Example 1: Modal
import React, { useState } from 'react'
import { Button } from 'react-native'
import DatePicker from 'react-native-date-picker'
export default () => {
const [date, setDate] = useState(new Date())
const [open, setOpen] = useState(false)
return (
<>
<Button title="Open" onPress={() => setOpen(true)} />
<DatePicker
modal
open={open}
date={date}
onConfirm={(date) => {
setOpen(false)
setDate(date)
}}
onCancel={() => {
setOpen(false)
}}
/>
</>
)
}
Example 2: Inlined
import React, { useState } from 'react'
import DatePicker from 'react-native-date-picker'
export default () => {
const [date, setDate] = useState(new Date())
return <DatePicker date={date} onDateChange={setDate} />
}
Props
Prop | Description | Screenshots iOS | Screenshot Android |
---|---|---|---|
date | The currently selected date. | ||
onDateChange | Date change handler ( Inline only ) | ||
maximumDate | Maximum selectable date. Example: new Date("2021-12-31") | ||
minimumDate | Minimum selectable date. Example: new Date("2021-01-01") | ||
minuteInterval | The interval at which minutes can be selected. | ||
mode | The date picker mode. "datetime" , "date" , "time" | ||
locale | The locale for the date picker. Changes language, date order and am/pm preferences. Value needs to be a Locale ID. | ||
timeZoneOffsetInMinutes | Timezone offset in minutes (default: device's timezone) | ||
is24hourSource | Change how the 24h mode (am/pm) should be determined, by device settings or by locale. {'locale', 'device'} (android only, default: 'device') | ||
modal | Boolean indicating if modal should be used. Default: "false" . When enabled, the other modal props needs to be used. See example. | ||
open | Modal only: Boolean indicating if modal should be open. | ||
onConfirm | Modal only: Date callback when user presses confirm button | ||
onCancel | Modal only: Callback for when user presses cancel button or closing the modal by pressing outside it. | ||
title | Modal only: Title text. Can be set to null to remove text. | ||
confirmText | Modal only: Confirm button text. | ||
cancelText | Modal only: Cancel button text. | ||
theme | Modal only: The theme of the modal. "light" , "dark" , "auto" . Defaults to "auto" . | ||
buttonColor | Color of the confirm and cancel buttons. (android modal only) | ||
dividerColor | Color of the divider / separator. (android only) | ||
onStateChange | Spinner state change handler. Triggered on changes between "idle" and "spinning" state (Android inline only) |
Font size
To change the font size on Android. Open styles.xml
and place this code right above the </resources>
. The font size is not possible to change in iOS out of the box, but there are some iOS workarounds.
<style name="DatePickerTheme" parent="DatePickerBaseTheme">
<item name="android:textSize">25sp</item>
</style>
React Native's new architecture
This package supports React Native's new architecture (Fabric + Turbo Modules) from React Native 0.71 and forward. Support was introduced in version 4.3.0
of react-native-date-picker
.
Linking
This package supports automatic linking. Usually, the only thing you need to do is to install the package, the cocoapods dependencies (as described above). Then rebuild the project by running react-native run-ios
, react-native run-android
or start the build from within Xcode/Android Studio. If you're running a React Native version below 0.60 or your setup is having issues with automatic linking, you can run npx react-native link react-native-date-picker
and rebuild. In some occations you'll have to manually link the package. Instructions in this issue.
FAQ
How do i change the date order? (To YYYY-MM-DD etc)
The order is determined by the locale
prop. Set for instance locale='fr'
to get the french preference. â ï¸ Setting the locale
to a different id won't change the title, confirm button and cancel button texts language.
How do i change the 12/24h or AM/PM format?
On iOS the 12/24h preference is determined by the locale
prop. Set for instance locale='fr'
to get the french preference. On Android the 12/24h format is determined by the device setting by default. Add is24hourSource="locale"
to let the locale determine the device setting on android as well. When using 12h mode the AM/PM part of the picker will be displayed. It is NOT recommended to force any specific 12/24h format, but this can be achieved by, choosing a locale which has the desired 24h preference and add is24hourSource="locale"
.
Is it possible to show only month and year?
This is unfortunately not possible due to the limitation in DatePickerIOS. You should be able to create your own month-year picker with for instance https://github.com/TronNatthakorn/react-native-wheel-pick.
Why does the Android app crash in production?
If you have enabled Proguard for Android you might need to ignore some classes to get the the picker to work properly in android production/release mode. Add these lines to you proguard file (often called proguard-rules.pro
):
-keep public class net.time4j.android.ApplicationStarter
-keep public class net.time4j.PrettyTime
What does it take to upgrade to v4 (4.0.0)?
There are no breaking changes in v4, so just bump the version number in your package json.
How can we disable confirm button until the wheel has stopped spinning?
Use the onStateChange
prop to track the state of the spinning wheel.
const [state, setState] = useState("idle")
...
<DatePicker onStateChange={setState} />
<ConfirmButton disabled={state === "spinning"} />
Three different modes
Here are some more info about the three different picker modes that are available.
Date time picker
Using the datetime mode gives you a react native date time picker where both date and time can be selected at the same time. The todays date will be replays with the string "Today" translated to the desired language. This is the default mode and look like this.
iOS | Android |
Add the optional datetime
mode property to use this mode. Since datetime is default this could also be exclude.
<DatePicker
...
mode="datetime"
/>
Datepicker
The date mode displays a react native datepicker with year month and date where the year-month-date order will be adjusted to the locale. If will look similar to this:
iOS | Android |
Just add the value date
to mode property:
<DatePicker
...
mode="date"
/>
Time picker
The time mode can be used when only the time matters. AM/PM will be added depending on locale and user setting. It can be useful to add the timeInterval
to only display the time with for instance 15min intervals. The react native time picker look like this:
iOS | Android |
Set mode property to time
to show the time picker:
<DatePicker
...
mode="time"
/>
About
React Native Date Picker is a cross platform component for iOS and Android. It uses native code from respective platform to get the genuine look and feel the users expect. A strong motivation for creating this picker was the datetime mode on Android. It's quite unique for the platform and avoids two different picker popups, which normally is necessary. Instead, this datetime mode requires fewer user actions and enables a great user-experience.
Support this package!
If you like this package, consider becoming a sponsor ð©·
Top Related Projects
React Native date & time picker component for iOS, Android and Windows
A React-Native datetime-picker for Android and iOS
react native datePicker component for both Android and IOS, useing DatePikcerAndroid, TimePickerAndroid and DatePickerIOS
React Native Calendar Components 🗓️ 📆
Picker is a cross-platform UI component for selecting an item from a list of options.
🔽 A Picker component for React Native which emulates the native <select> interfaces for iOS and Android
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot