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) 函数会返回想要输出的日期格式!

虽然解决了引用问题,但是觉得代码有些复杂,有更简洁或更好的方法 ~~ 希望大家多多给个建议 !!

(代码解析写得有些乱,希望大家谅解谅解~~~ ^^)

时间: 2024-10-21 12:10:41

JavaScript --- Date():轮值行排序的相关文章

Javascript实现表格行排序

网站开发中凡是用到表格来展示数据的,往往都要根据某个列来对行排序,下面是我从书上看到的一个行排序例子,看过后受益匪浅,故分享出来. 直接献上完整代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Javascript原生代码实现表格排序</title> <script type="

JavaScript Date对象介绍

Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new Date() :返回当前的本地日期和时间 参数:无 返回值: {Date} 返回一个表示本地日期和时间的Date对象. 示例: var dt = new Date(); console.log(dt); // => 返回一个表示本地日期和时间的Date对象 2.2 new Date(milliseconds) :把毫秒数转换为Date对象 参数

Javascript Date构造函数和比较 (二)

JavaScript Date对象 构造函数实例 Date构造函数中没有参数,将返回当前日期 var currentDate = new Date(); writeLine(currentDate.toLocaleString()); writeLine(currentDate.toLocaleDateString()); writeLine(currentDate.toLocaleTimeString()); 指定时间字符串, var strDate; strDate = new Date("

javascript Date format(js日期格式化)

方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.4

JavaScript Date(日期) 对象

日期对象用于处理日期和时间. 如何使用 Date() 方法获得当日的日期. getFullYear()使用 getFullYear() 获取年份. getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数. setFullYear()如何使用 setFullYear() 设置具体的日期. toUTCString()如何使用 toUTCString() 将当日的日期(根据 UTC)转换为字符串. getDay()如何使用 getDay() 和数组来显示星期,而不仅仅是

JavaScript - Date对象使用

<html> <head> <head> <body> <script language="javascript"> //Date对象 // 从字符串中分析出时间 // var dateVal = Date.parse("November 1, 1997 10:15 AM"); // var current_time = new Date(dateVal); // 获取系统时间的各个部分 var curre

行排序的逻辑

1.lua脚本部分 --------------------------此部分封装了排序的方法-------------------------------------         function unlock(sender)             local senderName=sender:getPropertyByName("name");             move[senderName]=0;         end;         function loc

JavaScript Date对象更进一步

总结分享这个近期开发解决的一个Bug. Javascript的Date对象具有容错性,会自动根据当年的日期根据设置的属性值转换,也就是说Date对象的setDate会影响setMonth,而month会影响到setFullYear. JavaScript的Date对象容错性 如果单独使用setDate.setMonth.setFullYear初始化Date对象的时候,Date未及时被初始化的属性会在你设置其他属性的时候影响到其他的属性值, 一般情况下,只会有setDate产生的影响所致,所以初始

利用JavaScript选择GridView行

利用JavaScript选择GridView行 本篇技巧和诀窍记录的是:利用JavaScript选择GridView行. 当我们想在GridView中添加删除.选择功能时,我们通常的做法是利用模板功能在每行添加一个按钮控件或者超链接按钮控件,单击按钮利用RowCommand获取每行的ID. 下面我们利用JavaScript完成这一功能. 我们可以通过调用JavaScirpt函数改变单击的行的背景颜色来模拟选择的行,这里需要声明一个隐藏字段,从JS中获得选取GridView行的ID.在选择/删除事