js如何将xxxx年xx周字符串转化为时间对象

  今天在项目中遇到需要天、周、月的时间字符串转化为时间对象,例如: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));

 

posted @ 2020-11-24 18:35  ki16  阅读(810)  评论(0编辑  收藏  举报
作者:ki16
出处:https://www.cnblogs.com/gaojinshun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
var _czc = _czc || [];