timeselector.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. var timeSelector = {
  2. data: {
  3. isAfter: true,
  4. isShowUnit: true
  5. },
  6. fnOpenSelector: function(_obj, _cb) {
  7. var _self = this;
  8. for( var x in _obj ){
  9. _self.data[x] = _obj[x];
  10. }
  11. _self.data.date = new Date(_obj.date);
  12. // 判断是否是一个正常的时间x
  13. if( isNaN(_self.data.date) ){
  14. _self.data.date = new Date();
  15. }
  16. // 判断是否设置过需要显示的时间层级
  17. if( ! _self.data.len ){
  18. if( typeof _obj.date === 'string' ){
  19. var _split = _obj.date.split(/[/ :]/);
  20. if( _split.length <= 1 ){
  21. if( _split[0].length <= 4 ){
  22. APP._len = 1;
  23. }
  24. }else if( _split.length == 2 ){
  25. // 年月格式补日,处理 ios 不能时间格式化兼容问题
  26. _obj.date+='/01';
  27. _self.data.date = new Date(_obj.date);
  28. _self.data.len = 2;
  29. }else{
  30. _self.data.len = _split.length;
  31. }
  32. }
  33. }
  34. setTimeout(function(){
  35. _self.fnStart(_cb);
  36. }, 100)
  37. },
  38. fnStart: function(_cb){
  39. var _self = this;
  40. var _date = new Date(_self.data.date);
  41. var oneLevelId = _self.data.nowYear = _date.getFullYear();
  42. var twoLevelId = _date.getMonth() + 1;
  43. var threeLevelId = _date.getDate();
  44. var fourLevelId = _date.getHours();
  45. var fiveLevelId = _date.getMinutes();
  46. var sixLevelId = _date.getSeconds();
  47. var _sureText = _self.data.sureText || '完成';
  48. var _title = _self.data.title || '时间选择';
  49. var yearData = function(callback) {
  50. callback(_self.formatYear(_self.data.nowYear))
  51. }
  52. var monthData = function(year, callback) {
  53. callback(_self.formatMonth());
  54. };
  55. var dateData = function(year, month, callback) {
  56. if (/^(1|3|5|7|8|10|12)$/.test(month)) {
  57. callback(_self.formatDate(31));
  58. } else if (/^(4|6|9|11)$/.test(month)) {
  59. callback(_self.formatDate(30));
  60. } else if (/^2$/.test(month)) {
  61. if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
  62. callback(_self.formatDate(29));
  63. } else {
  64. callback(_self.formatDate(28));
  65. }
  66. } else {
  67. throw new Error('month is illegal');
  68. }
  69. };
  70. var hourData = function(one, two, three, callback) {
  71. var hours = [];
  72. for (var i = 0, len = 24; i < len; i++) {
  73. hours.push({
  74. id: i,
  75. value: i + (_self.data.isShowUnit ? '时' : '')
  76. });
  77. }
  78. callback(hours);
  79. };
  80. var minuteData = function(one, two, three, four, callback) {
  81. var minutes = [];
  82. for (var i = 0, len = 60; i < len; i++) {
  83. minutes.push({
  84. id: i,
  85. value: i + (_self.data.isShowUnit ? '分' : '')
  86. });
  87. }
  88. callback(minutes);
  89. };
  90. var secondsData = function(one, two, three, four, five, callback) {
  91. var seconds = [];
  92. for (var i = 0, len = 60; i < len; i++) {
  93. seconds.push({
  94. id: i,
  95. value: i + (_self.data.isShowUnit ? '秒' : '')
  96. });
  97. }
  98. callback(seconds);
  99. };
  100. var _data = [yearData, monthData, dateData, hourData, minuteData, secondsData];
  101. if( _self.data.len ){
  102. _data = _data.splice(0, _self.data.len);
  103. }
  104. var iosSelect = new IosSelect(_data.length,
  105. _data,
  106. {
  107. sureText: _sureText,
  108. title: _title,
  109. oneLevelId: oneLevelId,
  110. twoLevelId: twoLevelId,
  111. threeLevelId: threeLevelId,
  112. fourLevelId: fourLevelId,
  113. fiveLevelId: fiveLevelId,
  114. sixLevelId: sixLevelId,
  115. itemShowCount: _self.data.itemShowCount || 5,
  116. itemHeight: _self.data.itemHeight || 55,
  117. callback: function (selectOneObj, selectTwoObj, selectThreeObj, selectFourObj, selectFiveObj, selectSixObj) {
  118. var _date = new Date(selectOneObj.id, selectTwoObj.id-1, selectThreeObj.id, selectFourObj.id, selectFiveObj.id, selectSixObj.id);
  119. _cb && _cb({
  120. date: _date
  121. });
  122. },
  123. fallback: function () {
  124. // 选择取消后的回调函数
  125. _cb && _cb();
  126. },
  127. maskCallback: function () {
  128. // 点击背景层关闭组件时触发的方法
  129. _cb && _cb();
  130. }
  131. });
  132. },
  133. formatYear: function(nowYear) {
  134. var _self = this;
  135. nowYear = _self.data.isAfter ? nowYear - 200 : nowYear;
  136. var arr = [];
  137. for (var i = nowYear; i <= nowYear + 400; i++) {
  138. arr.push({
  139. id: i + '',
  140. value: i + (_self.data.isShowUnit ? '年' : '')
  141. });
  142. }
  143. return arr;
  144. },
  145. formatMonth: function() {
  146. var _self = this;
  147. var arr = [];
  148. for (var i = 1; i <= 12; i++) {
  149. arr.push({
  150. id: i + '',
  151. value: i + (_self.data.isShowUnit ? '月' : '')
  152. });
  153. }
  154. return arr;
  155. },
  156. formatDate: function(count) {
  157. var _self = this;
  158. var arr = [];
  159. for (var i = 1; i <= count; i++) {
  160. arr.push({
  161. id: i + '',
  162. value: i + (_self.data.isShowUnit ? '日' : '')
  163. });
  164. }
  165. return arr;
  166. }
  167. }