JavaScript --- Date():轮值行排序
这几天师傅开始做一个项目,要给多个金融机构按周排值。根据项目的后台代码,师傅交代我用 javascript 写前台轮值排班的代码,实现四个轮值行按周循环值班的功能。 以下是实现功能的代码,虽然解决了解决引用问题,但代码写得有点罗嗦,觉得应该能有更简单实现方法,希望大家给个建议。
1 var bank =["工行","农行","中行","建行"],
2 result = [];
3
4 var beginDate=new Date("2015/02/16"),
5 endDate=new Date("2016/02/21"),
6 seconds=24 * 60 * 60 * 1000,
7
8 //计算指定的开始日期到结束日期之间共有多少天
9 day=(endDate-beginDate)/seconds,
10
11 //计算指定的开始日期到结束日期之间共有多少周
12 differ=(day+1)/7;
首先创建一个数组,把需要轮值的行名写进数组,再用 new Date() 创建需要排值的开始日期以及结束日期;
创建的日期返回毫秒数,结束日期和开始日期相减后除于毫秒数可得到指定日期之间共有多少天,再除于 7 得到共有多少周;
之后需要进行循环得到值班排序:
1 var begin_day = beginDate; 2 3 for (var i = 0; i < differ;) { 4 5 //嵌套循环,可以得到轮值行排序 6 for (var j = 0; j < bank.length; j++) { 7 8 //再次创建 new Date() 后,end_day 与 begin_day 拥有不同指针 9 //所以更改 end_day 的值不会使 begin_day 的值被更改 10 var end_day = new Date(begin_day.getFullYear() + "-" + 11 (begin_day.getMonth() + 1) + "-" + begin_day.getDate()); 12 13 //重新设置 end_day 的值,日期增加 6 可得到星期日的日期 14 end_day.setDate(end_day.getDate() + 6); 15 16 var temp = [begin_day, end_day, ChineseDateString(begin_day) + "---" + 17 ChineseDateString(end_day),bank[j]]; 18 if (i > differ - 1) { 19 break; 20 } 21 22 //再次创建 new Date() 后,temp_day 与 begin_day 也拥有不同指针
23 var temp_day = new Date(begin_day.getFullYear() + "-" + 24 (begin_day.getMonth() + 1) + "-" + begin_day.getDate()); 25 26 //重新设置 temp_day 的值,日期增加 7 可得到下一个星期一的日期 27 temp_day.setDate(temp_day.getDate() + 7); 28 30 begin_day = temp_day; 31 32 i++; 33 result.push(temp); 34 } 35 } 36 37 function ChineseDateString(date){
38 return date.getFullYear() + "年" + (date.getMonth() + 1) + "月" 39 + date.getDate() + "日"; 40 }
刚开始编写代码的时候没有创建 Date() 函数,直接把新创建的 temp 数组的前两个位置写成:
var temp=[begin_day,begin_day.setDate(begin_day.getDate()+6)];
发现 begin_day 的值随着 begin_day.setDate(begin_day.getDate()+6) 值的变化而变化。
创建 Date(),保存 begin_day 的日期后再进行更改,这样两者拥有不同的指针,不会互相受到影响。
再有,getMonth() 的值可取 0-11,0 表示 1 月,所以 getMonth() + 1,才能得到实际的月份。
把重新设置后的 temp_day 值赋给 begin_day,这样每次执行循环时 begin_day 的值都会跟着变化。
最后 ChineseDateString(date) 函数会返回想要输出的日期格式!
虽然解决了引用问题,但觉得代码有些复杂,若有更简洁或更好的方法,希望大家给个建议!