1. 程式人生 > >Friendly Date Ranges

Friendly Date Ranges

oct wrap reference dex 查看 根據 出現 devel -m

讓日期區間更友好!

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

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

記住不要顯示那些可以被推測出來的信息: 如果一個日期區間裏結束日期與開始日期相差小於一年,則結束日期就不用寫年份了;在這種情況下,如果月份開始和結束日期如果在同一個月,則結束日期月份也不用寫了。

另外, 如果開始日期年份是當前年份,且結束日期與開始日期小於一年,則開始日期的年份也不用寫。

例如:

包含當前年份和相同月份的時候,makeFriendlyDates(["2017-01-02", "2017-01-05"])

應該返回 ["January 2nd","5th"]

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

請考慮清楚所有可能出現的情況,包括傳入的日期區間是否合理。對於不合理的日期區間,直接返回 undefined 即可

當你遇到困難的時候,記得查看錯誤提示、閱讀文檔、搜索、提問。

這是一些對你有幫助的資源:

  • String.split()
  • String.substr()
  • parseInt()

本題的思路是先把字符串分割,然後取整年月日,根據條件返回不同的日期期間 ,話不多說,上代碼:

function makeFriendlyDates(arr) {
  if (!Array.isArray(arr)||arr.length!==2) return false;
  var month=[‘January‘,‘February‘,‘March‘,‘April‘,‘May‘,‘June‘,‘July‘,‘August‘,‘September‘,‘October‘,‘November‘,‘December‘];
  var day=[‘1st‘,‘2nd‘,‘3rd‘,‘4th‘,‘5th‘,‘6th‘,‘7th‘,‘8th‘,‘9th‘,‘10th‘,‘11th‘,‘12th‘,‘13th‘,‘14th‘,‘15th‘,‘16th‘,‘17th‘,‘18th‘,‘19th‘,‘20th‘,‘21st‘,‘22nd‘,‘23rd‘,‘24th‘,‘25th‘,‘26th‘,‘27th‘,‘28th‘,‘29th‘,‘30th‘,‘31st‘];
  
var fst=arr[0].split(‘-‘); var sec=arr[1].split(‘-‘); isRational(parseInt(fst[1]),parseInt(fst[2]));  //判斷日期是否正確 isRational(parseInt(sec[1]),parseInt(sec[2])); //判斷日期是否正確 if(parseInt(fst[0])>parseInt(sec[0])) return undefined; //開始年份要小於結束年份 var result=[]; var str1=‘‘; var str2=‘‘; str1=month[parseInt(fst[1])-1]+‘ ‘+day[parseInt(fst[2])-1]+‘, ‘+fst[0]; str2=month[parseInt(sec[1])-1]+‘ ‘+day[parseInt(sec[2])-1]+‘, ‘+sec[0]; //先寫完整的輸出格式,然後根據條件不同再分割 if(sec[0]===fst[0]||(parseInt(sec[0])-parseInt(fst[0])==1&&parseInt(sec[1])-parseInt(fst[1])<0)||(parseInt(sec[0])-parseInt(fst[0])==1&&parseInt(sec[1])-parseInt(fst[1])===0&&parseInt(sec[2])-parseInt(fst[2])<0)){ str2=str2.substring(0,str2.indexOf(‘,‘)); //判斷小於一年 if(parseInt(fst[0])===2017){ str1=str1.substring(0,str1.indexOf(‘,‘)); } //是否是當年 if(sec[0]===fst[0]&&parseInt(fst[1])===parseInt(sec[1])){ str2=str2.substr(-day[parseInt(sec[2])-1].length); //年月相同 if(parseInt(fst[2])===parseInt(sec[2])){ str2=‘‘; //年月日相同 } } } result[0]=str1; if(str2!==‘‘){ result[1]=str2; } return result; } function isRational(month,day){ if(typeof month !==‘number‘||typeof day !==‘number‘) return false; if(month>12||month<1||day>31||day<1) return undefined; } //判斷是否是合理的月份和日期

Friendly Date Ranges