1. 程式人生 > 實用技巧 >js如何將xxxx年xx周字串轉化為時間物件

js如何將xxxx年xx周字串轉化為時間物件

  今天在專案中遇到需要天、周、月的時間字串轉化為時間物件,例如: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));