forked from henninghall/react-native-date-picker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DatePickerAndroid.js
64 lines (48 loc) · 1.91 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
import React from 'react';
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native';
import moment from 'moment'
const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } });
class DatePickerAndroid extends React.Component {
static defaultProps = {
mode: 'datetime',
minuteInterval: 1,
};
render(){
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;