题目:

让日期区间更友好!

把常见的日期格式如: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 即可

代码:

<script type="text/javascript">
	function makeFriendlyDates(arr) {
		//获取当前年份
		// var yearnow=(new Date()).getFullYear();
		var yearnow = 2017;

		var date1 = arr[0].split('-');
		var date2 = arr[1].split('-');

		//去除不正确日期
		if (date1[0] > date2[0]) {
			return undefined;
		}
		if (date1[0] == date2[0] && date1[1] > date2[1]) {
			return undefined;
		}
		if (date1[0] == date2[0] && date1[1] == date2[1] && date1[2] > date2[2]) {
			return undefined;
		}

		//把日期转换成对应的简便字符串
		function daytostr(day) {
			//先转为数值,判断后再转为字符串
			day = parseInt(day);
			if (day == 1 || day == 21 || day == 31) {
				return day.toString() + 'st';
			} else if (day == 2 || day == 22) {
				return day.toString() + 'nd';
			} else if (day == 3 || day == 23) {
				return day.toString() + 'rd';
			} else {
				return day.toString() + 'th';
			}
		}

		//定义月份的英文表示
		var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
			"November", "December"
		];
		var date1str = '';
		var date2str = '';
		var newDate = [];

		//数组不能直接比较
		if (date1[0] == date2[0] && date1[1] == date2[1] && date1[2] == date2[2]) {
			newDate.push(months[date1[1] - 1] + ' ' + daytostr(date1[2]) + ', ' + date1[0]);
			return newDate;
		} else if (parseInt(date1[0]) == yearnow || date1[0] == date2[0]) {
			date1str = months[date1[1] - 1] + ' ' + daytostr(date1[2]);
		} else {
			date1str = months[date1[1] - 1] + ' ' + daytostr(date1[2]) + ', ' + date1[0];
		}

		newDate.push(date1str);

		console.log(date1);
		console.log(date2);

		//如果同年同月
		if (date1[0] == date2[0] && date1[1] == date2[1]) {
			date2str = daytostr(date2[2]);
			//如果同年不同月
		} else {
			date2str = months[date2[1] - 1] + ' ' + daytostr(date2[2]);
		}

		if (date2[0] - date1[0] > 1 || ((date2[0] - date1[0] == 1) && (date2[1] - date1[1] > 0)) || ((date2[0] - date1[0] ==
				1) && (date2[1] - date1[1] == 0) && (date2[2] - date1[2] >= 0))) {
			date2str = date2str + ', ' + date2[0];
		} else if (date1[0] == yearnow) {

		}

		return newDate;
	}
</script>