添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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控制台

// 将开始日期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]);
// 给月和天,不足两位的前面补0
function 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位的字符日期可以保存数据库,再拿出来时也方便处理。
今天在论坛中看到一个帖子,给定输入的字符型日期和结束的字符型日期,计算中间间隔的每一天的日期。正好项目不忙,就动手写了一下,记录下来吧。    原问题var start_time = "2015-2-1"var end_time = "2015-3-1"需求得到开始和结束时间之间所有天 return [ '2015-2-1',"2015-2-2" ... "2015-2-28" var start_date="20170212"; var end_date="20170619"; dateDiffs=DateDiff(start_date,end_date); alert("数:"+dateDiffs); //根据起始日期结束日期计算数 function DateDiff(sDate1, sDate2){ * 得到开始和结束日期得到中间所有返回数组 * @param {String} string 开始日期'2021-7-1' * @param {String} String 结束日期'2021-8-1' * @return {Array} ['2021-07-01', '2021-07-01'....
js通过开始时间结束时间计算出中间的所有日期写在前面一 已知开始时间结束时间 计算出中间的所有日期二 最近七 一个月 三个月 一年 实际开发过程中,我们有许许多多的产品都设计到了时间,也有时候需要自己转化时间格式,这里推荐一个日期时间处理类库momentjs,但很多时候,我们仅仅是转化个别时间,还没必要安装这么一个依赖;这篇文章将在未来持续更新,搜罗各种关于时间转化的方法 一 已...
在项目中需用计算一下两个日期之间的间隔数,比如2012-08-10至2012-08-10是之间间隔一,如果是2012-06-29至2012-07-01就是三,这个之前写的js方法中出现了一个bug,也就是 2012-06-29至2012-07-01 计算成了4,实际只有3,下面贴一下之前的那个js方法: //计算两个日期时间间隔functio...
JavaScript中,我们可以使用Date对象来处理时间日期。对于充电开始时间和充电结束时间,我们可以使用Date对象将它们转换成相应的时间戳(timestamp),并进行计算。 时间戳表示的是从1970年1月1日午夜(UTC)开始,经过的毫秒数。我们可以通过Math.floor()方法将时间戳转换成秒数,然后进行计算,得到充电时长。 以下是具体步骤: 1. 将充电开始时间和充电结束时间转换成时间戳: var startTimeStamp = new Date("2021/10/20 08:30:00").getTime(); // 充电开始时间 var endTimeStamp = new Date("2021/10/20 12:45:35").getTime(); // 充电结束时间 2. 计算两个时间戳之间的差值: var diff = Math.floor((endTimeStamp - startTimeStamp) / 1000); // 得到差值,单位为秒 3. 将差值转换成时分秒格式: var hours = Math.floor(diff / (60 * 60)); // 计算小时数 var minutes = Math.floor((diff % (60 * 60)) / 60); // 计算分钟数 var seconds = diff % 60; // 计算秒数 最终,我们可以输出充电时长,格式为:hh:mm:ss。例如,上述示例中,充电时长为 "04:15:35"。
Consider defining a bean of type ‘org.springframework.http.codec.ServerCodecConfigurer‘ in your conf Kangrant: Redis中字符串(string)与散列表(hash)比较 titer1: 整理得非常齐全,底层原理