js如何將xxxx年xx周字串轉化為時間物件
阿新 • • 發佈:2020-11-24
今天在專案中遇到需要天、周、月的時間字串轉化為時間物件,例如:2020-01-01、2020年第01周、2020-01
具體需求如圖,點選資料點時需要從對應的橫座標提取時間實現資料鑽取、檢視詳細資料,由於需要涉及到一些前端操作,所以轉化不能放到後端。
以下是我的解決方法
var str = "2020年第01周";varresult= str.match(/\d{1,4}/g) //匹配1~4個數字返回一個數組 vardate=newDate(result[0]);//得到指定年份1月1號時間 varweekDay=date.getDay();//返回一週中的某一天(0~6) weekDay==0?7:weekDay;//0代表週日改成7 date=newDate(date.setDate(date.getDate()-(weekDay-1)));//得到指定年份第一週週一時間 varweek=parseInt(result[1]);//取出解析出來的週數 date=newDate(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));