js 从开始和结束时间得到中间所有天
来源:互联网 发布:创维32寸网络电视价格 编辑:程序博客网 时间:2024/05/12 13:48
今天在论坛中看到一个帖子,给定输入的字符型日期和结束的字符型日期,计算中间间隔的每一天的日期。正好项目不忙,就动手写了一下,记录下来吧。
原问题
var start_time = "2015-2-1"
var end_time = "2015-3-1"需求得到开始和结束时间之间所有天 return [ '2015-2-1',"2015-2-2" ... "2015-2-28","2015-3-1"]
method 1
<script>// 获取间隔天数function getDays(day1, day2) {// 获取入参字符串形式日期的Date型日期var d1 = day1.getDate();var d2 = day2.getDate();// 定义一天的毫秒数var dayMilliSeconds = 1000*60*60*24;// 获取输入日期的毫秒数var d1Ms = d1.getTime();var d2Ms = d2.getTime();// 定义返回值var ret;// 对日期毫秒数进行循环比较,直到d1Ms 大于等于 d2Ms 时退出循环// 每次循环结束,给d1Ms 增加一天for (d1Ms; d1Ms <= d2Ms; d1Ms += dayMilliSeconds) {// 如果ret为空,则无需添加","作为分隔符if (!ret) {// 将给的毫秒数转换为Date日期var day = new Date(d1Ms);// 获取其年月日形式的字符串ret = day.getYMD();} else {// 否则,给ret的每个字符日期间添加","作为分隔符var day = new Date(d1Ms);ret = ret + ',' + day.getYMD();}}alert(ret); // 或可换为return ret;}// 给Date对象添加getYMD方法,获取字符串形式的年月日Date.prototype.getYMD = function(){ var retDate = this.getFullYear() + "-"; // 获取年份。 retDate += this.getMonth() + 1 + "-"; // 获取月份。 retDate += this.getDate(); // 获取日。 return retDate; // 返回日期。}// 给String对象添加getDate方法,使字符串形式的日期返回为Date型的日期String.prototype.getDate = function(){var strArr = this.split('-');var date = new Date(strArr[0], strArr[1] - 1, strArr[2]);return date;}getDays('2015-2-1', '2015-3-1'); </script>
上面的方法中,利用日期毫秒数比较的方式,同时让开始的日期进行自增,避免了计算每个月有多少天的情况。
getYMD 和 getDate 是分别在Date 和 String 原型上增加的方法,方便我们的使用。
method 2
打开chrome浏览器的console控制台
可以看到3月32日和4月1日的getTime 是相等的,所以,可以利用这点,让天数自增,来完成比较。
<script>// 获取间隔天数function getDays(day1, day2) {// 获取入参字符串形式日期的Date型日期var st = day1.getDate();var et = day2.getDate();// 定义返回的数组var retArr = [];// 循环,启动日期不等于结束日期时,进行循环while (st.getTime() != et.getTime()) {// 将启动日期的字符串形式的日期存放进数组retArr.push(st.getYMD());// 取得开始日期的天var tempDate = st.getDate();// 将开始日期st指向构造出的新的日期// 新的日期较之前的日期多加一天st = new Date(st.getFullYear(), st.getMonth(), st.getDate() + 1);}// 将结束日期的天放进数组retArr.push(et.getYMD());alert(retArr); // 或可换为return ret;}// 给Date对象添加getYMD方法,获取字符串形式的年月日Date.prototype.getYMD = function(){ var retDate = this.getFullYear() + "-"; // 获取年份。 retDate += this.getMonth() + 1 + "-"; // 获取月份。 retDate += this.getDate(); // 获取日。 return retDate; // 返回日期。}// 给String对象添加getDate方法,使字符串形式的日期返回为Date型的日期String.prototype.getDate = function(){var strArr = this.split('-');var date = new Date(strArr[0], strArr[1] - 1, strArr[2]);return date;}getDays('2015-2-9', '2015-3-8'); </script>
这里由于while循环的条件是 st.getTime() != et.getTime() 所以,while循环内,结束日期的字符型日期不会放进结果数组,所以要在while结束后将结束日期放进结果数组中。
method 3
<script>// 获取间隔天数function getDays(day1, day2) {// 获取入参字符串形式日期的Date型日期var st = day1.getDate();var et = day2.getDate();var retArr = [];// 获取开始日期的年,月,日var yyyy = st.getFullYear(),mm = st.getMonth(),dd = st.getDate();// 循环while (st.getTime() != et.getTime()) {retArr.push(st.getYMD());// 使用dd++进行天数的自增st = new Date(yyyy, mm, dd++);}// 将结束日期的天放进数组retArr.push(et.getYMD());alert(retArr); // 或可换为return ret;}// 给Date对象添加getYMD方法,获取字符串形式的年月日Date.prototype.getYMD = function(){ // 将结果放在数组中,使用数组的join方法返回连接起来的字符串,并给不足两位的天和月十位上补零 return [this.getFullYear(), fz(this.getMonth() + 1), fz(this.getDate())].join("-");}// 给String对象添加getDate方法,使字符串形式的日期返回为Date型的日期String.prototype.getDate = function(){var strArr = this.split('-');return new Date(strArr[0], strArr[1] - 1, strArr[2]);}// 给月和天,不足两位的前面补0function fz(num) {if (num < 10) {num = "0" + num;}return num}getDays('2015-2-9', '2015-3-8'); </script>
方法3 中做了下面两点改进
- 将while循环内的new Date() 时的入参定义到了外面,不用每次都使用st.getFullYear(),st.getMonth(),st.getDate() 的去获取,且new Date() 的天可以直接使用dd++,提高了运算效率
- getYMD 中,直接使用[this.getFullYear(), fz(this.getMonth() + 1), fz(this.getDate())].join("-") 替代了之前的四行代码,且给月份和天进行了补位,在不足两位的时候前面补0,这样处理过的8位的字符日期可以保存数据库,再拿出来时也方便处理。
2 0
- js 从开始和结束时间得到中间所有天
- js根据开始日期和结束日期得到中间的所有日期
- 按选择的开始时间和结束时间算出中间的所有年月日
- JS校验开始时间和结束时间
- JS开始时间和结束时间比较
- php根据开始日期和结束日期得到时间数组
- js验证开始时间和结束时间 结束时间不能比开始时间早
- 根据开始时间、结束时间得到两个时间段内所有的日期
- 【java】根据开始时间、结束时间得到两个时间段内所有的日期
- python给定起始和结束日期,如何得到中间所有日期
- python给定起始和结束日期,如何得到中间所有日期
- JS中验证开始时间和结束时间
- js获取本月开始时间和结束时间
- java 从开始时间到结束时间遍历一年所有时间
- SQL : 开始日期和结束日期,SQL找出中间的所有日期. 关于天数。
- 计算开始时间,结束时间 中间间隔毫秒数
- java根据开始时间结束时间计算中间间隔日期
- 提供开始和结束的时间戳 返回中间的day month year格式
- 子串和
- SDN你必须知道的十大问题——SDN有哪些开源项目?
- Convert Sorted List to Binary Search Tree
- 缓冲区溢出漏洞入门介绍
- A-star算法
- js 从开始和结束时间得到中间所有天
- POJ 2478-Farey Sequence(筛选法求欧拉函数)
- HTML5-2D版Baymax
- nat123 怎么开服(我的世界)
- 【Java】利用poi插件,把Excel内容读入Java,把Java中的内容输出到Excel
- Scheme 编译器--预处理器制作 (一) 去掉注释 及 实现单宏
- TIPTOP ERP 常用业务计算逻辑总结
- 数组 Next Permutation
- shell/bash编程中各类括号的应用