获取N天前的时间( 过去七天的年月日、toLocaleDateString的应用 、获取时间段字符串,Date.now()和new Date().getTime()的使用 )

本文介绍使用JavaScript获取过去七天日期的三种方法:利用getFullYear、getMonth、getDate,toLocaleDateString以及Date.now()。每种方法均有详细代码示例,包括如何处理月份数字以确保两位数格式。

需求:

  1. 获取过去七天到今天的时间段,需要字符串格式:2020-4-13~2020-4-20 ;
  2. 需要字符串格式:2020-04-13~2020-04-20 ;
  3. 需要的字符串格式 :?start=2020-04-13&end=2020-04-20;

一、用getFullYeargetMonthgetDate方法

	function getPastDate(num){ // num 是过去多少天,如过去七天,num为7;startTime 开始时间是过去;endTime结束时间是此刻;
	  let curDate=new Date(); // 获取当前时间对象
	  const startDate=new Date(curDate.getTime()-(num*24*3600*1000));// 获取当前的时间戳(毫秒),减去num转换的毫秒数,将得到的时间戳传给Date对象;便可获取到过去的那个时间点的时间对象;
	  const startTime=(startDate.getFullYear())+'-'+(startDate.getMonth()+1)+'-'+(startDate.getDate());// 获取过去的那个时间点的年月日,并用 短横线 - 连接;
	  return startTime;
	}

	function getCurrentDate(){
		let curDate=new Date();
		const endTime=(curDate.getFullYear())+'-'+(curDate.getMonth()+1)+'-'+(curDate.getDate());// 获取当前的时间点的年月日,并用短横线 - 连接;
		return endTime
	}
	
const startTime=getPastDate(7); // 如今天是 2020年4月20日,则startTime是2020-4-13;
const endTime=getCurrentDate();// endTime是今天,2020-4-20

二、 用toLocaleDateString方法

function getCurDate(){
	const curDate=new Date().toLocaleDateString(); //当前时间, 获取到的格式是:2020/4/20 
	const endTime=curDate.replace(/[/]/g,'-');// 用短横线 - 全局替换特殊字符 斜线/ 
	return endTime;
}
function getPastDate(num){
	let cur=new Date(); // 获取当前时间对象
	const pastDate=new Date(cur.getTime()-(num*24*3600*1000));
	const startTime=pastDate.toLocaleDateString().replace(/[/]/g,'-');
	return startTime;
}
getCurDate(); // 2020-4-20
getPastDate(7);// 2020-4-13

三、Date.now();方法,可获取到当前的毫秒数,

Date.now(); 等价于 new Date().getTime();,都是获取1970年1月1日截止到现在时刻的时间戳.

	function getPastDate(num){
		const pastDate=new Date(Date.now()-(num*24*3600*1000)); // 可获取到过去num天的时间对象
		const startTime=pastDate.toLocaleDateString().replace(/[/]/g,'-');
		return startTime;
	}
	getPastDate(7);// 2020-4-13

注意:

1.getFullYeargetMonthgetDate方法的时候,如果需要的是,2020-04-13 ,则还需对月份做一个处理;当月份小于10的时候,在月份前面加0,其余处理不做改变

const mon=(new Date().getMonth()+1)<10?`0${new Date().getMonth()+1}`:(new Date().getMonth()+1); // 如 :今天是2020年4月20日,则得到的mon为 04;

2.toLocaleDateString方法的时候,如果需要的是,2020-04-13 ,也需对数据进行处理

function getCurDate(){
	const curDate=new Date().toLocaleDateString(); //当前时间, 获取到的格式是:2020/4/20 
	const date=curDate.split('/'); // 返回的格式是,["2020", "4", "20"]
	const mon=date[1]<10?`0${date[1]}`:date[1];
	return `${date[0]}-${mon}-${date[2]}`;// 显示的格式是:2020-04-20
}

function getPastDate(num){
	let cur=new Date(); // 获取当前时间对象
	const pastDate=new Date(cur.getTime()-(num*24*3600*1000));
	const date=pastDate.toLocaleDateString().split('/');
	const mon=date[1]<10?`0${date[1]}`:date[1];
	return date[0]+'-'+mon+'-'+date[2]; // 显示的格式是:2020-04-13 
}
getCurDate(); // 2020-04-20
getPastDate(7);// 2020-04-13
<think>好的,用户想用JavaScriptnew Date().toLocaleString()方法生成接下来七天的日期列表。首先,我需要确认如何正确使用Date对象来获取时间,并逐步增加数。 用户提到了toLocaleString(),这个方法可以将日期转换为本地格式的字符串,方便显示。但生成七天列表的关键在于循环处理每一的日期。我需要先获取日期,然后循环七次,每次增加一,并保存对应的日期字符串。 首先,初始化一个数组来存储结果。然后获取的日期对象,这里要注意JavaScriptDate对象是动态的,直接修改会改变原对象,所以应该在循环内创建新的日期实例,或者在每次循环中基于当日期加上数。比如,使用new Date(now.getTime() + i * 24*3600*1000),其中i是0到6的数。 接下来,处理时区问题。如果用户直接修改now的日期,可能会导致问题,因为Date对象是可变的。所以更安全的做法是在每次循环中创建一个新的Date对象,基于初始时间加上相应的毫秒数。 然后,使用toLocaleString()方法将每个日期转换为本地格式的字符串。用户可能需要调整参数,比如是否包含时间、日期选项等,但根据问题描述,用户可能只需要日期部分。不过toLocaleString()默认包含日期时间,所以可能需要使用toLocaleDateString()来仅获取日期部分。或者用户可能希望自定义格式,比如{ weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },但具体参数需要根据用户需求调整。 另外,要注意不同浏览器对toLocaleString()的支持可能不同,但现代浏览器通常没问题。如果用户需要特定格式,可能需要更详细的配置选项。 最后,测试代码是否正确生成七天日期。例如,从今开始,依次加0到6,确保数组中有七个元素,并且日期正确递增。还要考虑月末年初的情况,比如当加一后月份变化时,Date对象是否能正确处理,比如1月31日加一变成2月1日,JavaScriptDate对象会自动处理这种情况,所以不需要手动调整。 总结步骤:初始化数组,循环7次,每次创建新日期,使用toLocaleString()转换,并推入数组。确保代码正确处理日期递增,并生成所需的字符串格式。</think>要实现生成接下来七天的日期列表,可以通过以下步骤使用JavaScript的`Date`对象`toLocaleString()`方法: ### 分步实现 1. **初始化日期列表数组** ```javascript let dateList = []; ``` 2. **获取时间** ```javascript let now = new Date(); ``` 3. **循环生成未来7日期** ```javascript for (let i = 0; i < 7; i++) { let nextDate = new Date(now.getTime() + i * 24 * 60 * 60 * 1000); dateList.push(nextDate.toLocaleString()); } ``` ### 完整代码 ```javascript let dateList = []; let now = new Date(); for (let i = 0; i < 7; i++) { let tempDate = new Date(now.getTime() + i * 24 * 60 * 60 * 1000); dateList.push(tempDate.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' })); } console.log(dateList); ``` ### 关键点说明 1. **时区处理** `new Date()`默认返回用户本地时间,`toLocaleString()`也按本地时区转换时间[^1][^2] 2. **日期递增逻辑** 通过`now.getTime()`获取时间戳,每次循环增加`i*24小时`的毫秒数,避免直接修改原对象导致错误[^1] 3. **格式化参数优化** 使用`toLocaleString('zh-CN', options)`可自定义输出格式,示例中包含了年月日时分秒的两位数显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值