FCC(ES6寫法) Friendly Date Ranges

把常見的日期格式如:YYYY-MM-DD 轉換成一種更易讀的格式。javascript

易讀格式應該是用月份名稱代替月份數字,用序數詞代替數字來表示天 (1st 代替 1)。java

包含當前年份和相同月份的時候,makeFriendlyDates(["2017-01-02", "2017-01-05"]) 應該返回 ["January 2nd","5th"]。git

不包含當前年份,makeFriendlyDates(["2003-08-15", "2009-09-21"]) 應該返回 ["August 15th, 2003", "September 21st, 2009"]github

請考慮清楚全部可能出現的狀況,包括傳入的日期區間是否合理。對於不合理的日期區間,直接返回 undefined 便可。app

 

思路:優化

就是幾個條件判斷一下就好了。寫的有點繁瑣,有更簡便的請留言。code

 

let makeFriendlyDates = arr => {  
  const months = {"01" : "January","02" : "February","03" : "March", "04" : "April","05" : "May", "06" : "June", "07" : "July","08" : "August", "09" : "September","10" : "October", "11" : "November","12" : "December"  };  
  let date1 = arr[0].split("-"); 
  let date2 = arr[1].split("-");
  let date = new Date();  
  let dateChange = day => {  
    if(day[0] === "0"){  
      day = day.substr(1);  
      if(day === "1") return day + "st";  //01->1st
      if(day === "2") return day + "nd";  //02->2nd
      if(day === "3") return day + "rd";  //03->3rd
      else return day + "th";  
    }  
    else{  
      if(day.substr(1,1) === "1" && day.substr(0,1) === "2") return day + "st";  //21->21st
      if(day.substr(1,1) === "1" && day.substr(0,1) === "3") return day + "st";  //31->31st
      if(day.substr(1,1) === "2" && day.substr(0,1) === "2") return day + "nd";  //22->22nd
      if(day.substr(1,1) === "3" && day.substr(0,1) === "2") return day + "rd";  //23->23rd
      else return day + "th";   
    }    
  };  
  let sameYear = (d1, d2) => {  
    if(d2[0] - d1[0] > 1) return false;  
    else{  
      if(d1[0] === d2[0]) return true;   
      else{  //判斷相減爲1的時候
        if(d2[1] > d1[1]) return false;  
        if(d2[1] < d1[1]) return true; //判斷在一年之內返回true
        else return d2[2] < d1[2] ? true : false; //判斷是否在一年之內
      }  
    }  
  };  
  if (sameYear(date1, date2)) { 
    if(date1[0] === date2[0]){  
      if(date1[1] === date2[1]){  //月份相同 
        if(date1[2] === date2[2]){  //日期相同
          let dateArr = [];  
          dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]);  
          return dateArr;  
        }  
        else{  
          let dateArr = [];  
          dateArr.push(months[date1[1]] + " " + dateChange(date1[2]));  
          dateArr.push(dateChange(date2[2]));  
          return dateArr;  
        }  
      }
      else{  //月份不一樣
        let dateArr = [];  
        dateArr.push(months[date1[1]] + " " + dateChange(date1[2]));  
        dateArr.push(months[date2[1]] + " " + dateChange(date2[2]));  
        return dateArr;  
      }  
    }  
    if(date1[0] == date.getFullYear() - 1){  //開始年份爲當前年份 
      let dateArr = [];  
      dateArr.push(months[date1[1]] + " " + dateChange(date1[2]));  
      dateArr.push(months[date2[1]] + " " + dateChange(date2[2]));  
      return dateArr;  
    }  
    else{  
      let dateArr = [];  
      dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]);  
      dateArr.push(months[date2[1]] + " " + dateChange(date2[2]));  
      return dateArr;  
    }  
  }    
  if (date2[0] > date1[0]){  //不一樣年且d2比d1大時
    let dateArr = [];  
    dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]);  
    dateArr.push(months[date2[1]] + " " + dateChange(date2[2]) + ", " + date2[0]);  
    return dateArr;  
  }  
}  
makeFriendlyDates(["2017-02-05", "2017-03-03"]);  

  

 

若是有不明白的地方請留言,若是有更好更簡便更優化的方法請留言,謝謝。blog

 

更多內容請訪問個人我的博客: Bblogip

相關文章
相關標籤/搜索