pickerYMDHM.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // pages/component/pickerYMDHM/pickerYMDHM.js
  2. Component({
  3. /**
  4. * 组件的属性列表
  5. */
  6. properties: {
  7. date: { // 属性名
  8. type: null, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
  9. value: "" // 属性初始值(可选),如果未指定则会根据类型选择一个
  10. }
  11. },
  12. /**
  13. * 组件的初始数据
  14. */
  15. data: {
  16. pickerArray: [],//日期控件数据list
  17. pickerIndex: [],//日期控件选择的index
  18. chooseIndex: [],//日期控件确认选择的index
  19. chooseArray: [],//日期控件确认选择后的list
  20. dateString: '',//页面显示日期
  21. },
  22. /**
  23. * 组件的方法列表
  24. */
  25. methods: {
  26. _onInit() {
  27. let date = new Date();
  28. if (this.data.date != "") {
  29. let str = this.data.date;
  30. str = str.replace(/-/g, "/");
  31. date = new Date(str);
  32. }
  33. let pickerArray = this.data.pickerArray;
  34. // console.log(date.getFullYear());
  35. //默认选择3年内
  36. let year = [];
  37. for (let i = date.getFullYear() - 1; i <= date.getFullYear() + 5; i++) {
  38. year.push({ id: i, name: i + "年" });
  39. }
  40. // console.log(year);
  41. let month = [];
  42. for (let i = 1; i <= 12; i++) {
  43. month.push({ id: i, name: i + "月" });
  44. }
  45. // console.log(month);
  46. let dayNum = this._getNumOfDays(date.getFullYear(), date.getMonth() + 1);
  47. let day = [];
  48. for (let i = 1; i <= dayNum; i++) {
  49. day.push({ id: i, name: i + "日" });
  50. }
  51. // console.log(day);
  52. let time = [];
  53. for (let i = 0; i <= 23; i++) {
  54. if (i < 10) {
  55. time.push({ id: i, name: "0" + i + "时" });
  56. } else {
  57. time.push({ id: i, name: i + "时" });
  58. }
  59. }
  60. // console.log(time);
  61. let division = [];
  62. for (let i = 0; i <= 59; i++) {
  63. if (i < 10) {
  64. division.push({ id: i, name: "0" + i + "分" });
  65. } else {
  66. division.push({ id: i, name: i + "分" });
  67. }
  68. }
  69. // console.log(division);
  70. pickerArray[0] = year;
  71. pickerArray[1] = month;
  72. pickerArray[2] = day;
  73. pickerArray[3] = time;
  74. pickerArray[4] = division;
  75. let mdate = {
  76. date: date,
  77. year: date.getFullYear() + '',
  78. month: date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + '',
  79. day: date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + '',
  80. time: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + '',
  81. division: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + ''
  82. }
  83. mdate.dateString = mdate.year + '-' + mdate.month + '-' + mdate.day + ' ' + mdate.time + ':' + mdate.division;
  84. this.setData({
  85. pickerArray,
  86. pickerIndex: [1, date.getMonth(), date.getDate() - 1, date.getHours(), date.getMinutes()],
  87. chooseIndex: [1, date.getMonth(), date.getDate() - 1, date.getHours(), date.getMinutes()],
  88. chooseArray: pickerArray,
  89. dateString: mdate.dateString
  90. })
  91. // console.log(date);
  92. // this.triggerEvent('onPickerChange', mdate);
  93. // console.log(this.data.pickerArray);
  94. // console.log(this._getNumOfDays(2018, 10));
  95. },
  96. /**
  97. *
  98. * 获取本月天数
  99. * @param {number} year
  100. * @param {number} month
  101. * @param {number} [day=0] 0为本月0最后一天的
  102. * @returns number 1-31
  103. */
  104. _getNumOfDays(year, month, day = 0) {
  105. return new Date(year, month, day).getDate()
  106. },
  107. pickerChange: function (e) {
  108. // console.log('picker发送选择改变,携带值为', e.detail.value)
  109. let indexArr = e.detail.value;
  110. // 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);
  111. const year = this.data.pickerArray[0][indexArr[0]].id;
  112. const month = this.data.pickerArray[1][indexArr[1]].id;
  113. const day = this.data.pickerArray[2][indexArr[2]].id;
  114. const time = this.data.pickerArray[3][indexArr[3]].id;
  115. const division = this.data.pickerArray[4][indexArr[4]].id;
  116. let date = {
  117. date: new Date(year + '-' + month + '-' + day + ' ' + time + ':' + division),
  118. year: year + '',
  119. month: month < 10 ? '0' + month : month + '',
  120. day: day < 10 ? '0' + day : day + '',
  121. time: time < 10 ? '0' + time : time + '',
  122. division: division < 10 ? '0' + division : division + ''
  123. }
  124. date.dateString = date.year + '-' + date.month + '-' + date.day + ' ' + date.time + ':' + date.division;
  125. // console.log(date);
  126. this.setData({
  127. chooseIndex: e.detail.value,
  128. chooseArray: this.data.pickerArray,
  129. dateString: date.dateString
  130. })
  131. this.triggerEvent('onPickerChange', date);
  132. },
  133. pickerColumnChange: function (e) {
  134. // console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
  135. var data = {
  136. pickerArray: this.data.pickerArray,
  137. pickerIndex: this.data.pickerIndex
  138. };
  139. data.pickerIndex[e.detail.column] = e.detail.value;
  140. if (e.detail.column == 1) {
  141. let dayNum = this._getNumOfDays(data.pickerArray[0][data.pickerIndex[0]].id, e.detail.value + 1);
  142. let day = [];
  143. for (let i = 1; i <= dayNum; i++) {
  144. day.push({ id: i, name: i + "日" });
  145. }
  146. if (dayNum < data.pickerIndex[2] + 1) {
  147. data.pickerIndex[2] = dayNum - 1;
  148. }
  149. data.pickerArray[2] = day;
  150. }
  151. this.setData(data);
  152. },
  153. pickerCancel: function (e) {
  154. // console.log("取消");
  155. this.setData({
  156. pickerIndex: this.data.chooseIndex,
  157. pickerArray: this.data.chooseArray
  158. })
  159. },
  160. },
  161. // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
  162. attached() {
  163. // 在组件实例进入页面节点树时执行
  164. // 在组件实例进入页面节点树时执行
  165. // this._onInit();
  166. },
  167. ready() {
  168. // console.log('进入ready外层节点=', this.data.date);
  169. this._onInit();
  170. },
  171. // 以下为新方法 >=2.2.3
  172. lifetimes: {
  173. attached() {
  174. // 在组件实例进入页面节点树时执行
  175. // this._onInit();
  176. },
  177. detached() {
  178. // 在组件实例被从页面节点树移除时执行
  179. },
  180. ready() {
  181. // console.log('进入ready节点=', this.data.date);
  182. this._onInit();
  183. }
  184. }
  185. })