w-picker.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. const forMatNum=(num)=>{
  2. return num<10?'0'+num:num+'';
  3. }
  4. const initPicker={
  5. //日期
  6. date:{
  7. init(start,end,mode="date",step,value,flag,disabled){
  8. let aToday=new Date();
  9. let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
  10. let initstartDate=new Date(start.toString());
  11. let endDate=new Date(end.toString());
  12. if(start>end){
  13. initstartDate=new Date(end.toString());
  14. endDate=new Date(start.toString());
  15. };
  16. let startYear=initstartDate.getFullYear();
  17. let startMonth=initstartDate.getMonth()+1;
  18. let endYear=endDate.getFullYear();
  19. let years=[],months=[],days=[],hours=[],minutes=[],seconds=[],areas=[],returnArr=[];
  20. let curMonth=flag?value[1]*1:(value[1]+1);
  21. let dYear=aToday.getFullYear();
  22. let dMonth=aToday.getMonth()+1;
  23. let dDate=aToday.getDate();
  24. let totalDays=new Date(startYear,curMonth,0).getDate();
  25. let dvalObj={};
  26. switch(mode){
  27. case "half":
  28. case "date":
  29. case "yearMonth":
  30. let curYear=value[0];
  31. let curMonth=value[1];
  32. if(disabled){
  33. for(let s=startYear;s<=dYear;s++){
  34. years.push(s+'');
  35. };
  36. if(curYear==dYear){
  37. for(let m=1;m<=dMonth;m++){
  38. months.push(forMatNum(m));
  39. };
  40. }else{
  41. for(let m=1;m<=12;m++){
  42. months.push(forMatNum(m));
  43. };
  44. }
  45. if(curMonth==dMonth){
  46. for(let d=1;d<=dDate;d++){
  47. days.push(forMatNum(d));
  48. }
  49. }else{
  50. for(let d=1;d<=totalDays;d++){
  51. days.push(forMatNum(d));
  52. }
  53. }
  54. }else{
  55. for(let s=startYear;s<=endYear;s++){
  56. years.push(s+'');
  57. };
  58. for(let m=1;m<=12;m++){
  59. months.push(forMatNum(m));
  60. };
  61. for(let d=1;d<=totalDays;d++){
  62. days.push(forMatNum(d));
  63. }
  64. };
  65. break;
  66. default:
  67. for(let s=startYear;s<=endYear;s++){
  68. years.push(s+'');
  69. };
  70. for(let m=1;m<=12;m++){
  71. months.push(forMatNum(m));
  72. };
  73. for(let d=1;d<=totalDays;d++){
  74. days.push(forMatNum(d));
  75. }
  76. break;
  77. }
  78. for(let h=0;h<24;h++){
  79. hours.push(forMatNum(h));
  80. }
  81. for(let m=0;m<60;m+=step*1){
  82. minutes.push(forMatNum(m));
  83. }
  84. for(let s=0;s<60;s++){
  85. seconds.push(forMatNum(s));
  86. }
  87. if(flag){
  88. returnArr=[
  89. years.indexOf(value[0]),
  90. months.indexOf(value[1]),
  91. days.indexOf(value[2]),
  92. hours.indexOf(value[3]),
  93. minutes.indexOf(value[4])==-1?0:minutes.indexOf(value[4]),
  94. seconds.indexOf(value[5])
  95. ]
  96. }
  97. switch(mode){
  98. case "range":
  99. if(flag){
  100. defaultVal=[returnArr[0],returnArr[1],returnArr[2],0,returnArr[0],returnArr[1],returnArr[2]];
  101. return {years,months,days,defaultVal}
  102. }else{
  103. return {years,months,days}
  104. }
  105. break;
  106. case "date":
  107. if(flag){
  108. defaultVal=[returnArr[0],returnArr[1],returnArr[2]];
  109. return {years,months,days,defaultVal}
  110. }else{
  111. defaultVal=[
  112. years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
  113. months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
  114. days.indexOf(value[2])==-1?0:days.indexOf(value[2])
  115. ];
  116. return {years,months,days,defaultVal}
  117. }
  118. break;
  119. case "half":
  120. areas=[{
  121. label:"上午",
  122. value:0
  123. },{
  124. label:"下午",
  125. value:1
  126. }];
  127. if(flag){
  128. defaultVal=[returnArr[0],returnArr[1],returnArr[2],returnArr[3]];
  129. return {years,months,days,areas,defaultVal}
  130. }else{
  131. let idx=0;
  132. areas.map((v,k)=>{
  133. if(v.label==value[3]){
  134. idx=v.value;
  135. }
  136. })
  137. defaultVal=[
  138. years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
  139. months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
  140. days.indexOf(value[2])==-1?0:days.indexOf(value[2]),
  141. idx
  142. ];
  143. return {years,months,days,areas,defaultVal}
  144. }
  145. break;
  146. case "yearMonth":
  147. if(flag){
  148. defaultVal=[returnArr[0],returnArr[1]];
  149. return {years,months,defaultVal}
  150. }else{
  151. defaultVal=[
  152. years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
  153. months.indexOf(value[1])==-1?0:months.indexOf(value[1])
  154. ];
  155. return {years,months,defaultVal}
  156. }
  157. break;
  158. case "dateTime":
  159. if(flag){
  160. defaultVal=returnArr;
  161. }else{
  162. defaultVal=[
  163. years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
  164. months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
  165. days.indexOf(value[2])==-1?0:days.indexOf(value[2]),
  166. hours.indexOf(value[3])==-1?0:hours.indexOf(value[3]),
  167. minutes.indexOf(value[4])==-1?0:minutes.indexOf(value[4]),
  168. seconds.indexOf(value[5])==-1?0:seconds.indexOf(value[5])
  169. ];
  170. }
  171. return {years,months,days,hours,minutes,seconds,defaultVal}
  172. break;
  173. case "time":
  174. if(flag){
  175. defaultVal=[returnArr[3],returnArr[4],returnArr[5]];
  176. }else{
  177. defaultVal=[
  178. hours.indexOf(value[0])==-1?0:hours.indexOf(value[0]),
  179. minutes.indexOf(value[1])==-1?0:minutes.indexOf(value[1]),
  180. seconds.indexOf(value[2])==-1?0:seconds.indexOf(value[2])
  181. ];
  182. }
  183. return {hours,minutes,seconds,defaultVal}
  184. break;
  185. }
  186. },
  187. initMonths:(year,disabled)=>{
  188. let aDate=new Date();
  189. let dYear=aDate.getFullYear();
  190. let dMonth=aDate.getMonth()+1;
  191. let dDate=aDate.getDate();
  192. let flag=dYear==year?true:false;
  193. let months=[];
  194. if(disabled){
  195. if(flag){
  196. for(let m=1;m<=dMonth;m++){
  197. months.push(forMatNum(m));
  198. };
  199. }else{
  200. for(let m=1;m<=12;m++){
  201. months.push(forMatNum(m));
  202. };
  203. }
  204. }else{
  205. for(let m=1;m<=12;m++){
  206. months.push(forMatNum(m));
  207. };
  208. };
  209. return months;
  210. },
  211. initDays:(year,month,disabled)=>{
  212. let aDate=new Date();
  213. let dYear=aDate.getFullYear();
  214. let dMonth=aDate.getMonth()+1;
  215. let dDate=aDate.getDate();
  216. let flag=(dYear==year&&dMonth==month)?true:false;
  217. let totalDays=new Date(year,month,0).getDate();
  218. let dates=[];
  219. if(flag&&disabled){
  220. for(let d=1;d<=dDate;d++){
  221. dates.push(forMatNum(d));
  222. };
  223. }else{
  224. for(let d=1;d<=totalDays;d++){
  225. dates.push(forMatNum(d));
  226. };
  227. };
  228. return dates;
  229. },
  230. },
  231. //短期日期上下午
  232. limitHour:{
  233. init(dayStep=7,dVal){
  234. let startDate=new Date();
  235. let date=[],areas=[],hours=[];
  236. let hour=new Date().getHours();
  237. let weeks=["周日","周一","周二","周三","周四","周五","周六"];
  238. let arrs=[];
  239. let defaultVal=[];
  240. let d=0,a=0,h=0;
  241. for(let i=0;i<dayStep;i++){
  242. let year,month,day,weekday;
  243. year=startDate.getFullYear();
  244. month=forMatNum(startDate.getMonth()+1);
  245. day=forMatNum(startDate.getDate());
  246. weekday=weeks[startDate.getDay()];
  247. let label="";
  248. switch(i){
  249. case 0:
  250. label="今天";
  251. break;
  252. case 1:
  253. label="明天"
  254. break;
  255. case 2:
  256. label="后天"
  257. break;
  258. default:
  259. label=month+"月"+day+"日"+" "+weekday;
  260. break;
  261. }
  262. date.push({
  263. label:label,
  264. value:year+"-"+month+"-"+day,
  265. today:i==0?true:false
  266. })
  267. startDate.setDate(startDate.getDate()+1);
  268. }
  269. if(hour>12){
  270. areas=[{
  271. label:"下午",
  272. value:1
  273. }]
  274. }else{
  275. areas=[{
  276. label:"上午",
  277. value:0
  278. },{
  279. label:"下午",
  280. value:1
  281. }]
  282. };
  283. for(let k=hour>12?hour-12:hour;k<=12;k++){
  284. hours.push({
  285. label:forMatNum(k),
  286. value:forMatNum(hour>12?k+12:k)
  287. })
  288. };
  289. date.map((v,k)=>{
  290. if(v.label==dVal[0]){
  291. d=k
  292. }
  293. })
  294. if(d!=0){
  295. areas=this.initAreas(date[d]);
  296. hours=this.initHours(date[d],areas[a]);
  297. }
  298. areas.map((v,k)=>{
  299. if(v.label==dVal[1]){
  300. a=k
  301. }
  302. })
  303. hours.map((v,k)=>{
  304. if(v.label==dVal[2]){
  305. h=k
  306. }
  307. });
  308. defaultVal=[d,a,h]
  309. return {date,areas,hours,defaultVal};
  310. },
  311. initAreas(date){
  312. let areas=[];
  313. let hour=new Date().getHours();
  314. if(date.today){
  315. if(hour>12){
  316. areas=[{
  317. label:"下午",
  318. value:1
  319. }]
  320. }else{
  321. areas=[{
  322. label:"上午",
  323. value:0
  324. },{
  325. label:"下午",
  326. value:1
  327. }]
  328. };
  329. }else{
  330. areas=[{
  331. label:"上午",
  332. value:0
  333. },{
  334. label:"下午",
  335. value:1
  336. }]
  337. }
  338. return areas;
  339. },
  340. initHours(dateCol,hourCol){
  341. let hours=[];
  342. let hour=new Date().getHours();
  343. if(dateCol.today){
  344. if(hourCol.value==1&&hour<=12){
  345. for(let k=1;k<=12;k++){
  346. hours.push({
  347. label:forMatNum(k),
  348. value:forMatNum(hourCol.value==1?k+12:k)
  349. })
  350. };
  351. }else{
  352. for(let k=hour>12?hour-12:hour;k<=12;k++){
  353. hours.push({
  354. label:forMatNum(k),
  355. value:forMatNum(hourCol.value==1?k+12:k)
  356. })
  357. };
  358. }
  359. }else{
  360. for(let k=1;k<=12;k++){
  361. hours.push({
  362. label:forMatNum(k),
  363. value:forMatNum(hourCol.value==1?k+12:k)
  364. })
  365. };
  366. };
  367. return hours
  368. }
  369. },
  370. //短期日期时间初始化
  371. limit:{
  372. init(dayStep=7,startHour=8,endHour=20,minuteStep=1,afterStep=30,dVal){
  373. let startDate=new Date();
  374. let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
  375. let date=[],hours=[],minutes=[];
  376. let hour=bsDate.getHours();
  377. let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
  378. let weeks=["周日","周一","周二","周三","周四","周五","周六"];
  379. let d=0,h=0,m=0;
  380. let defaultVal=[];
  381. for(let i=0;i<dayStep;i++){
  382. let year,month,day,weekday;
  383. year=startDate.getFullYear();
  384. month=forMatNum(startDate.getMonth()+1);
  385. day=forMatNum(startDate.getDate());
  386. weekday=weeks[startDate.getDay()];
  387. let label="";
  388. switch(i){
  389. case 0:
  390. label="今天";
  391. break;
  392. case 1:
  393. label="明天"
  394. break;
  395. case 2:
  396. label="后天"
  397. break;
  398. default:
  399. label=month+"月"+day+"日"+" "+weekday;
  400. break;
  401. }
  402. date.push({
  403. label:label,
  404. value:year+"-"+month+"-"+day,
  405. flag:i==0?true:false
  406. })
  407. startDate.setDate(startDate.getDate()+1);
  408. }
  409. if(hour<startHour){
  410. hour=startHour;
  411. };
  412. if(hour>endHour){
  413. hour=endHour;
  414. };
  415. for(let k=hour*1;k<=endHour*1;k++){
  416. hours.push({
  417. label:forMatNum(k),
  418. value:forMatNum(k),
  419. flag:k==hour?true:false
  420. })
  421. };
  422. for(let j=minute;j<60;j+=minuteStep*1){
  423. minutes.push({
  424. label:forMatNum(j),
  425. value:forMatNum(j)
  426. });
  427. }
  428. date.map((v,k)=>{
  429. if(v.label==dVal[0]){
  430. d=k
  431. }
  432. })
  433. if(d!=0){
  434. hours=this.initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date[d].value);
  435. }
  436. hours.map((v,k)=>{
  437. if(v.label==dVal[1]){
  438. h=k
  439. }
  440. })
  441. minutes.map((v,k)=>{
  442. if(v.label==dVal[2]){
  443. m=k
  444. }
  445. })
  446. defaultVal=[d,h,m];
  447. return {date,hours,minutes,defaultVal};
  448. },
  449. initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date){
  450. let hours=[];
  451. let arr=date.split("-");
  452. let aDate=new Date();
  453. let dYear=aDate.getFullYear();
  454. let dMonth=aDate.getMonth()+1;
  455. let dDate=aDate.getDate();
  456. let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
  457. let hour=bsDate.getHours();
  458. let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
  459. if(hour>endHour){
  460. hour=endHour;
  461. };
  462. if(flag){
  463. for(let k=hour*1;k<=endHour*1;k++){
  464. hours.push({
  465. label:forMatNum(k),
  466. value:forMatNum(k),
  467. flag:k==hour?true:false
  468. })
  469. };
  470. }else{
  471. for(let k=startHour*1;k<=endHour*1;k++){
  472. hours.push({
  473. label:forMatNum(k),
  474. value:forMatNum(k),
  475. flag:false
  476. })
  477. }
  478. };
  479. return hours;
  480. },
  481. initMinutes(startHour=8,endHour=20,minuteStep=1,afterStep=30,date,hour){
  482. let minutes=[];
  483. let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
  484. let arr=date.split("-");
  485. let aDate=new Date();
  486. let dYear=aDate.getFullYear();
  487. let dMonth=aDate.getMonth()+1;
  488. let dDate=aDate.getDate();
  489. let dHour=bsDate.getHours();;
  490. let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
  491. let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
  492. if(flag){
  493. if(hour==dHour){
  494. for(let j=minute;j<60;j+=minuteStep*1){
  495. minutes.push({
  496. label:forMatNum(j),
  497. value:forMatNum(j)
  498. });
  499. }
  500. }else{
  501. for(let j=0;j<60;j+=minuteStep*1){
  502. minutes.push({
  503. label:forMatNum(j),
  504. value:forMatNum(j)
  505. })
  506. }
  507. }
  508. }else{
  509. for(let j=0;j<60;j+=minuteStep*1){
  510. minutes.push({
  511. label:forMatNum(j),
  512. value:forMatNum(j)
  513. })
  514. }
  515. }
  516. return minutes;
  517. }
  518. },
  519. //选择区间初始化
  520. range:{
  521. init(start,end,value,flag){
  522. let aToday=new Date();
  523. let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
  524. let initstartDate=new Date(start.toString());
  525. let endDate=new Date(end.toString());
  526. if(start>end){
  527. initstartDate=new Date(end.toString());
  528. endDate=new Date(start.toString());
  529. };
  530. let startYear=initstartDate.getFullYear();
  531. let startMonth=initstartDate.getMonth()+1;
  532. let endYear=endDate.getFullYear();
  533. let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[],returnArr=[];
  534. let curMonth=flag?value[1]*1:(value[1]+1);
  535. let totalDays=new Date(startYear,curMonth,0).getDate();
  536. for(let s=startYear;s<=endYear;s++){
  537. fyears.push(s+'');
  538. };
  539. for(let m=1;m<=12;m++){
  540. fmonths.push(forMatNum(m));
  541. };
  542. for(let d=1;d<=totalDays;d++){
  543. fdays.push(forMatNum(d));
  544. };
  545. for(let s=startYear;s<=endYear;s++){
  546. tyears.push(s+'');
  547. };
  548. for(let m=1;m<=12;m++){
  549. tmonths.push(forMatNum(m));
  550. };
  551. for(let d=1;d<=totalDays;d++){
  552. tdays.push(forMatNum(d));
  553. };
  554. defaultVal=[
  555. fyears.indexOf(value[0])==-1?0:fyears.indexOf(value[0]),
  556. fmonths.indexOf(value[1])==-1?0:fmonths.indexOf(value[1]),
  557. fdays.indexOf(value[2])==-1?0:fdays.indexOf(value[2]),
  558. 0,
  559. tyears.indexOf(value[4])==-1?0:tyears.indexOf(value[4]),
  560. tmonths.indexOf(value[5])==-1?0:tmonths.indexOf(value[5]),
  561. tdays.indexOf(value[6])==-1?0:tdays.indexOf(value[6])
  562. ];
  563. return {
  564. fyears,
  565. fmonths,
  566. fdays,
  567. tyears,
  568. tmonths,
  569. tdays,
  570. defaultVal
  571. }
  572. },
  573. initDays(year,month){
  574. let totalDays=new Date(year,month,0).getDate();
  575. let dates=[];
  576. for(let d=1;d<=totalDays;d++){
  577. dates.push(forMatNum(d));
  578. };
  579. return dates;
  580. }
  581. }
  582. }
  583. export default initPicker