forked from SeanChenU/react-native-date-picker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DatePickerAndroid.js
76 lines (62 loc) · 1.9 KB
/
DatePickerAndroid.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import React from 'react'
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native'
import moment from 'moment'
import { throwIfInvalidProps } from './propChecker'
const NativeDatePicker = requireNativeComponent(
`DatePickerManager`,
DatePickerAndroid,
{ nativeOnly: { onChange: true } }
)
class DatePickerAndroid extends React.PureComponent {
static defaultProps = {
mode: 'datetime',
minuteInterval: 1,
}
render() {
if (__DEV__) throwIfInvalidProps(this.props)
return (
<NativeDatePicker
{...this.props}
date={this._date()}
minimumDate={this._minimumDate()}
maximumDate={this._maximumDate()}
onChange={this._onChange}
style={[styles.picker, this.props.style]}
utc={this.props.timeZoneOffsetInMinutes !== undefined}
/>
)
}
_onChange = e => {
const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date).toDate()
this.props.onDateChange(jsDate)
}
_maximumDate = () =>
this.props.maximumDate &&
this._toIsoWithTimeZoneOffset(this.props.maximumDate)
_minimumDate = () =>
this.props.minimumDate &&
this._toIsoWithTimeZoneOffset(this.props.minimumDate)
_date = () => this._toIsoWithTimeZoneOffset(this.props.date)
_fromIsoWithTimeZoneOffset = date => {
if (this.props.timeZoneOffsetInMinutes === undefined) return moment(date)
return moment
.utc(date)
.subtract(this.props.timeZoneOffsetInMinutes, 'minutes')
}
_toIsoWithTimeZoneOffset = date => {
if (this.props.timeZoneOffsetInMinutes === undefined)
return moment(date).toISOString()
return moment
.utc(date)
.add(this.props.timeZoneOffsetInMinutes, 'minutes')
.toISOString()
}
}
const styles = StyleSheet.create({
picker: {
width: 310,
height: 180,
},
})
DatePickerAndroid.propTypes = DatePickerIOS.propTypes
export default DatePickerAndroid