Last active
August 20, 2016 06:04
-
-
Save zhangolve/f2940e24512adff4056150442f1b2143 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function makeFriendlyDates(arr) { | |
var date=['1st','2nd','3rd','21st','22nd','23rd','31st']; | |
var month=['January','February','March','April','May','June','July','August','September','October','November','December'] ; | |
var startRange=arr[0].split('-'); | |
var endRange=arr[1].split('-'); | |
var everymonth2=[31,29,31,30,31,30,31,31,30,31,30,31]; //区分平年和闰年,为了以后计算是否在一年以内。 | |
var everymonth1=[31,28,31,30,31,30,31,31,30,31,30,31]; | |
var result=[]; | |
var str; | |
var str2; | |
var middle; | |
var middle2; | |
function parse(arr) //用于将数组中的字符串转化成整形量。 | |
{ | |
for(var i=0;i<arr.length;i++) | |
{ | |
arr[i]=parseInt(arr[i]); | |
} | |
} | |
function formatDay(day) //得到日期的要求格式 | |
{ | |
switch(day) | |
{ | |
case 1:day=date[0];break; | |
case 2:day=date[1];break; | |
case 3:day=date[2];break; | |
case 21:day=date[3];break; | |
case 22:day=date[4];break; | |
case 23:day=date[5];break; | |
case 31:day=date[6];break; | |
default:day=day+'th'; | |
} | |
return day; | |
} | |
function formatMonth(mon)//得到月份的要求格式。 | |
{ | |
for(var i=1;i<13;i++) | |
{ | |
if(mon==i) | |
{ | |
mon=month[i-1]; | |
} | |
} | |
return mon; | |
} | |
function change(arr) //改变数组中的位置,来达到要求的排列。 | |
{ | |
var middle=arr[0]; | |
arr.splice(0,1); | |
arr.push(middle); | |
} | |
function sumDay(arr1,arr2) //计算范围是否在一年之内。 | |
{ | |
var sum1=0; | |
var sum2=0; | |
function subsumDay(arr) | |
{ | |
var sum=0; | |
if(arr[0]%4===0) | |
{ | |
for(var i=0;i<arr[1]-1;i++) | |
{ | |
sum+=everymonth2[i]; | |
} | |
sum+=arr[2]; | |
} | |
else{ | |
for(var j=0;j<arr[1]-1;j++) | |
{ | |
sum+=everymonth1[j]; | |
} | |
sum+=arr[2]; | |
} | |
return sum; | |
} | |
sum1=subsumDay(arr1); | |
if(arr1[0]%4===0) | |
{ | |
sum2=(arr2[0]-arr1[0])*366+subsumDay(arr2); | |
} | |
else{ | |
sum2=(arr2[0]-arr1[0])*365+subsumDay(arr2); | |
} | |
return sum2-sum1; //返回的是这个范围的天数 | |
} | |
function currentYear(arr1,arr2) //当前年份是2016年且范围小于一年返回true | |
{ | |
if(arr1[0]==2016) | |
{ | |
if(sumDay(arr1,arr2)<365) | |
{ | |
return true; | |
} | |
else{ | |
return false; | |
} | |
} | |
else{ | |
return false; | |
} | |
} | |
function sameYearMonth(arr1,arr2) //条件之一,同年同月 | |
{ | |
if(arr1[0]==arr2[0]&&arr1[1]==arr2[1]) | |
{ | |
return true; | |
} | |
else{ | |
return false; | |
} | |
} | |
function format(arr1,arr2) //格式化的过程。 | |
{ | |
arr1[2]=formatDay(arr1[2]); | |
arr2[2]=formatDay(arr2[2]); | |
arr1[1]=formatMonth(arr1[1]); | |
arr2[1]=formatMonth(arr2[1]); | |
} | |
parse(startRange); | |
parse(endRange); | |
//如果日期范围是从当年(2016年)开始,并且在一年内(指的是365天这样的概念,而不是2016年这样的概念)结束,那么年份将不会被显示出来 | |
if(startRange[0]==endRange[0]&&startRange[1]==endRange[1]&&startRange[2]==endRange[2]) //同一天的情况,不能使用startRange==endRange判断数组相等。 | |
{ | |
format(startRange,endRange); | |
change(startRange); | |
middle=startRange[2]; | |
startRange.splice(2,1); | |
str=startRange.join(' '); | |
str=str.concat(', ',middle); | |
result.push(str); | |
return result; | |
} | |
if(sameYearMonth(startRange,endRange)) | |
{ | |
if(currentYear(startRange,endRange)) | |
{ | |
format(startRange,endRange); | |
startRange.splice(0,1); | |
endRange.splice(0,2); | |
str=startRange.join(' '); | |
result.push(str); | |
result.push(endRange[0]); | |
return result; | |
} | |
else{ | |
format(startRange,endRange); | |
change(startRange); | |
middle=startRange[2]; | |
startRange.splice(2,1); | |
str=startRange.join(' '); | |
str=str.concat(', ',middle); | |
result.push(str); | |
endRange.splice(0,2); | |
result.push(endRange[0]); | |
return result; | |
} | |
} | |
if(currentYear(startRange,endRange)) //makeFriendlyDates(["2016-12-01", "2017-02-03"]) should return ["December 1st","February 3rd"]. | |
{ | |
format(startRange,endRange); | |
change(startRange); | |
change(endRange); | |
startRange.splice(2,1); | |
endRange.splice(2,1); | |
str=startRange.join(' '); | |
str2=endRange.join(' '); | |
result.push(str,str2); | |
return result; | |
} | |
else if(sumDay(startRange,endRange)<365){ | |
format(startRange,endRange); | |
change(startRange); | |
change(endRange); | |
endRange.splice(2,1); | |
middle=startRange[2]; | |
startRange.splice(2,1); | |
str=startRange.join(' '); | |
str=str.concat(', ',middle); | |
str2=endRange.join(' '); | |
result.push(str,str2); | |
return result; | |
} | |
else{//一般的情况,范围超过一年,且当前年份非2016. | |
format(startRange,endRange); | |
change(startRange); | |
change(endRange); | |
//endRange.splice(2,1); | |
middle=startRange[2]; | |
middle2=endRange[2]; | |
startRange.splice(2,1); | |
endRange.splice(2,1); | |
str=startRange.join(' '); | |
str=str.concat(', ',middle); | |
str2=endRange.join(' '); | |
str2=str2.concat(', ',middle2); | |
result.push(str,str2); | |
return result; | |
} | |
} | |
makeFriendlyDates(['2022-09-05', '2023-09-06']); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment