YRDatePicker.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. * Created by Arison on 2019/8/16.
  3. */
  4. import React, {Component} from 'react';
  5. import {StyleSheet,View,Text,TouchableOpacity} from 'react-native';
  6. import Picker from 'react-native-picker';
  7. class YRDatePicker extends React.Component{
  8. constructor(props){
  9. super(props);
  10. this.state = ({
  11. currentDate:this._getCurrentDate(),
  12. })
  13. }
  14. //获取当前日期 格式如 2018-12-15
  15. _getCurrentDate(){
  16. var currDate = new Date()
  17. var year = currDate.getFullYear()
  18. var month = (currDate.getMonth()+1).toString()
  19. month = month.padStart(2,'0')
  20. var dateDay = currDate.getDate().toString()
  21. dateDay = dateDay.padStart(2,'0')
  22. let time = year+'-'+month+'-'+dateDay
  23. return time;
  24. }
  25. //组装日期数据
  26. _createDateData(){
  27. let date = [];
  28. var currDate = new Date()
  29. var year = currDate.getFullYear()
  30. var month = currDate.getMonth()+1
  31. for(let i=1970;i<=year;i++){
  32. let month = [];
  33. for(let j = 1;j<13;j++){
  34. let day = [];
  35. if(j === 2){
  36. for(let k=1;k<29;k++){
  37. day.push(k+'日');
  38. }
  39. //Leap day for years that are divisible by 4, such as 2000, 2004
  40. if(i%4 === 0){
  41. day.push(29+'日');
  42. }
  43. }
  44. else if(j in {1:1, 3:1, 5:1, 7:1, 8:1, 10:1, 12:1}){
  45. for(let k=1;k<32;k++){
  46. day.push(k+'日');
  47. }
  48. }
  49. else{
  50. for(let k=1;k<31;k++){
  51. day.push(k+'日');
  52. }
  53. }
  54. let _month = {};
  55. _month[j+'月'] = day;
  56. month.push(_month);
  57. }
  58. let _date = {};
  59. _date[i+'年'] = month;
  60. date.push(_date);
  61. }
  62. return date;
  63. }
  64. //打开日期选择 视图
  65. _showDatePicker() {
  66. var year = ''
  67. var month = ''
  68. var day = ''
  69. var dateStr = this.state.currentDate
  70. //console.log('dateStr',dateStr)
  71. year = dateStr.substring(0,4)
  72. month = parseInt(dateStr.substring(5,7))
  73. day = parseInt(dateStr.substring(8,10))
  74. Picker.init({
  75. pickerTitleText:'时间选择',
  76. pickerCancelBtnText:'取消',
  77. pickerConfirmBtnText:'确定',
  78. selectedValue:[year+'年',month+'月',day+'日'],
  79. pickerBg:[255,255,255,1],
  80. pickerData: this._createDateData(),
  81. pickerFontColor: [33, 33 ,33, 1],
  82. onPickerConfirm: (pickedValue, pickedIndex) => {
  83. var year = pickedValue[0].substring(0,pickedValue[0].length-1)
  84. var month = pickedValue[1].substring(0,pickedValue[1].length-1)
  85. month = month.padStart(2,'0')
  86. var day = pickedValue[2].substring(0,pickedValue[2].length-1)
  87. day = day.padStart(2,'0')
  88. let str = year+'-'+month+'-'+day
  89. this.setState({
  90. currentDate:str,
  91. })
  92. },
  93. onPickerCancel: (pickedValue, pickedIndex) => {
  94. console.log('date', pickedValue, pickedIndex);
  95. },
  96. onPickerSelect: (pickedValue, pickedIndex) => {
  97. console.log('date', pickedValue, pickedIndex);
  98. }
  99. });
  100. Picker.show();
  101. }
  102. render(){
  103. return(
  104. <View style={styles.container}>
  105. <View style={styles.content}>
  106. <Text style={styles.textStyle}>选择日期</Text>
  107. <TouchableOpacity onPress={()=>this._showDatePicker()}>
  108. <Text style={styles.textStyle}>{this.state.currentDate}</Text>
  109. </TouchableOpacity>
  110. </View>
  111. </View>
  112. )
  113. }
  114. }
  115. const styles = StyleSheet.create({
  116. textStyle:{
  117. fontSize:18,
  118. },
  119. container:{
  120. flex:1,
  121. justifyContent:'center',
  122. alignItems:'center'
  123. },
  124. content:{
  125. width:'100%',
  126. flexDirection:'row',
  127. justifyContent:'space-around'
  128. }
  129. })
  130. export default YRDatePicker;