pickerYMD.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <view>
  3. <view class="container">
  4. <picker mode="multiSelector" @change="pickerChange" @columnchange="pickerColumnChange" @cancel="pickerCancel"
  5. value="pickerIndex" range="pickerArray" range-key="name">
  6. <view class='showFont'>
  7. {{date}}
  8. </view>
  9. </picker>
  10. </view>
  11. </view>
  12. </template>
  13. <script>
  14. export default {
  15. data() {
  16. return {
  17. pickerArray: [], //日期控件数据list
  18. pickerIndex: [], //日期控件选择的index
  19. chooseIndex: [], //日期控件确认选择的index
  20. chooseArray: [], //日期控件确认选择后的list
  21. dateString: '', //页面显示日期
  22. }
  23. },
  24. methods: {
  25. _onInit() {
  26. let date = new Date();
  27. if (this.date != "") {
  28. let str = this.date;
  29. str = str.replace(/-/g, "/");
  30. date = new Date(str);
  31. }
  32. let pickerArray = this.data.pickerArray;
  33. // console.log(date.getFullYear());
  34. //默认选择3年内
  35. let year = [];
  36. for (let i = date.getFullYear() - 1; i <= date.getFullYear() + 5; i++) {
  37. year.push({
  38. id: i,
  39. name: i + "年"
  40. });
  41. }
  42. // console.log(year);
  43. let month = [];
  44. for (let i = 1; i <= 12; i++) {
  45. month.push({
  46. id: i,
  47. name: i + "月"
  48. });
  49. }
  50. // console.log(month);
  51. let dayNum = this._getNumOfDays(date.getFullYear(), date.getMonth() + 1);
  52. let day = [];
  53. for (let i = 1; i <= dayNum; i++) {
  54. day.push({
  55. id: i,
  56. name: i + "日"
  57. });
  58. }
  59. // console.log(day);
  60. let time = [];
  61. for (let i = 0; i <= 23; i++) {
  62. if (i < 10) {
  63. time.push({
  64. id: i,
  65. name: "0" + i + "时"
  66. });
  67. } else {
  68. time.push({
  69. id: i,
  70. name: i + "时"
  71. });
  72. }
  73. }
  74. // console.log(time);
  75. let division = [];
  76. for (let i = 0; i <= 59; i++) {
  77. if (i < 10) {
  78. division.push({
  79. id: i,
  80. name: "0" + i + "分"
  81. });
  82. } else {
  83. division.push({
  84. id: i,
  85. name: i + "分"
  86. });
  87. }
  88. }
  89. // console.log(division);
  90. pickerArray[0] = year;
  91. pickerArray[1] = month;
  92. pickerArray[2] = day;
  93. pickerArray[3] = time;
  94. pickerArray[4] = division;
  95. let mdate = {
  96. date: date,
  97. year: date.getFullYear() + '',
  98. month: date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + '',
  99. day: date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + '',
  100. time: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + '',
  101. division: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + ''
  102. }
  103. mdate.dateString = mdate.year + '-' + mdate.month + '-' + mdate.day + ' ' + mdate.time + ':' + mdate.division;
  104. this.setData({
  105. pickerArray,
  106. pickerIndex: [1, date.getMonth(), date.getDate() - 1, date.getHours(), date.getMinutes()],
  107. chooseIndex: [1, date.getMonth(), date.getDate() - 1, date.getHours(), date.getMinutes()],
  108. chooseArray: pickerArray,
  109. dateString: mdate.dateString
  110. })
  111. // console.log(date);
  112. // this.triggerEvent('onPickerChange', mdate);
  113. // console.log(this.data.pickerArray);
  114. // console.log(this._getNumOfDays(2018, 10));
  115. },
  116. /**
  117. *
  118. * 获取本月天数
  119. * @param {number} year
  120. * @param {number} month
  121. * @param {number} [day=0] 0为本月0最后一天的
  122. * @returns number 1-31
  123. */
  124. _getNumOfDays(year, month, day = 0) {
  125. return new Date(year, month, day).getDate()
  126. },
  127. pickerChange: function(e) {
  128. // console.log('picker发送选择改变,携带值为', e.detail.value)
  129. let indexArr = e.detail.value;
  130. // console.log(this.data.pickerArray[0][indexArr[0]].id + "\n" + this.data.pickerArray[1][indexArr[1]].id + "\n" + this.data.pickerArray[2][indexArr[2]].id);
  131. const year = this.pickerArray[0][indexArr[0]].id;
  132. const month = this.pickerArray[1][indexArr[1]].id;
  133. const day = this.pickerArray[2][indexArr[2]].id;
  134. const time = this.pickerArray[3][indexArr[3]].id;
  135. const division = this.pickerArray[4][indexArr[4]].id;
  136. let date = {
  137. date: new Date(year + '-' + month + '-' + day + ' ' + time + ':' + division),
  138. year: year + '',
  139. month: month < 10 ? '0' + month : month + '',
  140. day: day < 10 ? '0' + day : day + '',
  141. time: time < 10 ? '0' + time : time + '',
  142. division: division < 10 ? '0' + division : division + ''
  143. }
  144. date.dateString = date.year + '-' + date.month + '-' + date.day + ' ' + date.time + ':' + date.division;
  145. // console.log(date);
  146. this.setData({
  147. chooseIndex: e.detail.value,
  148. chooseArray: this.pickerArray,
  149. dateString: date.dateString
  150. })
  151. this.triggerEvent('onPickerChange', date);
  152. },
  153. pickerColumnChange: function(e) {
  154. // console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
  155. var data = {
  156. pickerArray: this.data.pickerArray,
  157. pickerIndex: this.data.pickerIndex
  158. };
  159. data.pickerIndex[e.detail.column] = e.detail.value;
  160. if (e.detail.column == 1) {
  161. let dayNum = this._getNumOfDays(data.pickerArray[0][data.pickerIndex[0]].id, e.detail.value + 1);
  162. let day = [];
  163. for (let i = 1; i <= dayNum; i++) {
  164. day.push({
  165. id: i,
  166. name: i + "日"
  167. });
  168. }
  169. if (dayNum < data.pickerIndex[2] + 1) {
  170. data.pickerIndex[2] = dayNum - 1;
  171. }
  172. data.pickerArray[2] = day;
  173. }
  174. this.setData(data);
  175. },
  176. pickerCancel: function(e) {
  177. // console.log("取消");
  178. this.setData({
  179. pickerIndex: this.data.chooseIndex,
  180. pickerArray: this.data.chooseArray
  181. })
  182. },
  183. ready() {
  184. // console.log('进入ready外层节点=', this.data.date);
  185. this._onInit();
  186. },
  187. },
  188. }
  189. </script>
  190. <style>
  191. </style>