TimePicker 日期/时间选择组件 >=1.3.0
渲染出一个可以选择日期/时间的组件。这是一个受控组件,需要在 onDateChange 的回调中设置 date。
属性
mode { 'date' / 'time' / 'datetime' }
选择时间的模式,支持三种:datetime为日期和时间,time为时间,date为日期。
默认值: datetime
date { Date }
当前的选中值,由于这是一个受控组件,所以需要在 onDateChange 回调中每次修改这个值。
默认值: new Date()
minimumDate { Date }
可选的最小值,超过范围会自动回弹。
maximumDate { Date }
可选的最大值,超过范围会自动回弹。
minuteInterval { oneOf([1, 2, 3, 5, 6, 10, 12, 15, 20, 30]) }
可选的最小的分钟单位。
默认值: 1
onDateChange { function }
(date) => void
当选择的事件发生变化之后触发的回调
方法参数:
参数名 | 类型 | 描述 | 版本 |
---|---|---|---|
date | Date | 当前选择的时间 |
示例
import React, { TimePicker, View, Component, StyleSheet, Text, Button } from 'qunar-react-native';
const styles = StyleSheet.create({
operationContainer: {
paddingBottom: 5,
paddingHorizontal: 10,
flexDirection: 'row',
},
operationText: {
flex: 1,
alignSelf: 'center',
},
operationTextHighlight: {
color: '#1ba9ba',
},
itemText: {
padding: 5,
color: '#fff',
alignSelf:'flex-end',
fontSize: 32,
fontWeight: 'bold'
}
});
class TimePickerExample extends Component {
constructor(props){
super(props);
this.state = {
date: new Date(),
minimumDate: this.props.mode === 'time' ? getRandomMinTime() : getRandomMinDate(),
maximumDate: this.props.mode === 'time' ? getRandomMaxTime() : getRandomMaxDate(),
minuteInterval: 1,
}
}
render() {
return (
<View style={{flex:1}}>
<View style={styles.operationContainer}>
<Text style={styles.operationText}>最小值:<Text style={styles.operationTextHighlight}>{this.state.minimumDate ? formatDate(this.state.minimumDate) : 'None'}</Text>
</Text>
<Button text='切换' onPress={() => this.setState({minimumDate: this.state.minimumDate ? null : ( this.props.mode === 'time' ? getRandomMinTime() : getRandomMinDate())})} />
</View>
<View style={styles.operationContainer}>
<Text style={styles.operationText}>最大值:<Text style={styles.operationTextHighlight}>{this.state.maximumDate ? formatDate(this.state.maximumDate) : 'None'}</Text>
</Text>
<Button text='切换' onPress={() => this.setState({maximumDate: this.state.maximumDate ? null : ( this.props.mode === 'time' ? getRandomMaxTime() : getRandomMaxDate())})} />
</View>
<View style={styles.operationContainer}>
<Text style={styles.operationText}>minuteInterval:<Text style={styles.operationTextHighlight}>{this.state.minuteInterval}</Text>
</Text>
<Button text='切换' onPress={() => this.setState({minuteInterval: getRandomInterval()})} />
</View>
<TimePicker
mode={this.props.mode}
date={this.state.date}
onDateChange={(currentDate) => {console.log(currentDate); this.setState({date: currentDate})}}
minimumDate={this.state.minimumDate}
maximumDate={this.state.maximumDate}
minuteInterval={this.state.minuteInterval}
/>
</View>
);
}
}
function getRandomInterval() {
const intervals = [1, 2, 3, 5, 6, 10, 12, 15, 20, 30, 1];
return intervals[Math.floor(Math.random() * 10)];
}
function getRandomMinDate() {
let date = new Date();
date.setFullYear(date.getFullYear() - Math.floor(Math.random() * 5));
date.setMonth(date.getMonth() - Math.floor(Math.random() * 12));
date.setDate(date.getDate() - Math.floor(Math.random() * 31));
date.setHours(Math.floor(Math.random() * 24));
date.setMinutes(Math.floor(Math.random() * 60));
return date;
}
function getRandomMaxDate() {
let date = new Date();
date.setFullYear(date.getFullYear() + Math.floor(Math.random() * 5));
date.setMonth(date.getMonth() + Math.floor(Math.random() * 12));
date.setDate(date.getDate() + Math.floor(Math.random() * 31));
date.setHours(Math.floor(Math.random() * 24));
date.setMinutes(Math.floor(Math.random() * 60));
return date;
}
function getRandomMinTime() {
let date = new Date(),
_date = date.getDate(),
_hour = date.getHours(),
_minute = date.getMinutes();
let _isYesterday = Math.random() > 0.5
date.setDate( _isYesterday ? _date - 1 : _date);
date.setHours(Math.floor(Math.random() * (_isYesterday ? 24 : _hour)));
date.setMinutes(Math.floor(Math.random() * _minute));
return date;
}
function getRandomMaxTime() {
let date = new Date(),
_hour = date.getHours(),
_minute = date.getMinutes();
date.setHours(_hour + Math.floor(Math.random() * (24 - _hour)));
date.setMinutes(_minute + Math.floor(Math.random() * (60 - _minute)));
return date;
}
function formatDate(date) {
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes();
}
module.exports = {
title: 'TimePicker',
scroll: true,
examples: [
{
subtitle: 'Default settings',
render: () => {
return (
<View>
<TimePickerExample />
<TimePickerExample mode={'time'}/>
<TimePickerExample mode={'date'}/>
</View>
)
},
}
],
};