- A+
所属分类:Web前端
今天在项目中遇到需要天、周、月的时间字符串转化为时间对象,例如:2020-01-01、2020年第01周、2020-01
具体需求如图,点击数据点时需要从对应的横坐标提取时间实现数据钻取、查看详细数据,由于需要涉及到一些前端操作,所以转化不能放到后端。
以下是我的解决方法
var str = "2020年第01周";
var result = str.match(/d{1,4}/g) //匹配1~4个数字 返回一个数组
var date = new Date(result[0]); //得到指定年份1月1号时间
var weekDay = date.getDay(); //返回一周中的某一天 (0 ~ 6)
weekDay==0?7:weekDay; //0代表周日改成7
date = new Date(date.setDate(date.getDate()-(weekDay-1))); //得到指定年份第一周周一时间
var week = parseInt(result[1]); //取出解析出来的周数
date = new Date(date.setDate(date.getDate()+((week-1))*7)); //得到指定周周一时间
首先用match() 方法全局匹配获取到年份和周数
var result = str.match(/d{1,4}/g)
然后使用得到的年份直接new一个Date对象,可以得到那一年的1月1号的Date对象
var date = new Date(result[0]);
再用Date对象的getDay()方法获取1月1号是这一周的第几天
var weekDay = date.getDay();
外国人的一般习惯使用星期天作为一周的第一天,而我们一般习惯把星期一当成一周中的第一天,所以这里把0替换成7
weekDay==0?7:weekDay;
例如 2020年1月1日是星期三,距离星期一是2天,也就是weekDay-1天,从1月1日减去weekDay-1天可以得到第一周的周一时间
date = new Date(date.setDate(date.getDate()-(weekDay-1)));
在第一周的基础上加上(week-1))*7天就能得到我们所需的时间
date = new Date(date.setDate(date.getDate()+((week-1))*7));