FCC(ES6写法) Friendly Date Ranges
把常见的日期格式如: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 即可。
思路:
就是几个条件判断一下就行了。写的有点繁琐,有更简便的请留言。
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"]);
如果有不明白的地方请留言,如果有更好更简便更优化的方法请留言,谢谢。
更多内容请访问我的个人博客:Bblog
FCC(ES6写法) Friendly Date Ranges的更多相关文章
- js-FCC算法Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- Friendly Date Ranges 让日期区间更友好
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果 ...
- Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- Friendly Date Ranges-freecodecamp算法题目
Friendly Date Ranges 1.要求 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 ...
- React,React Native中的es5和es6写法对照
es6用在React中的写法总结: 在es6还没有完全支持到浏览器的阶段里,已经有很多技术人员开始用es6的写法来超前编程了,因为有转义es6语法的工具帮助下,大家才可大量使用.解析看看es6写法用在 ...
- 6-最基础的服务-es6写法
创建server.js 'use strict'; //http模块 var http = require('http'); //封装的方法 var handlers = require('./han ...
- react-native ES5与ES6写法对照表
转载链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native-es5-and-es6-writing-tabl ...
- 【转】React Native中ES5 ES6写法对照
很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...
- JavaScript get set方法 ES5/ES6写法
网上鲜有get和set的方法的实例,在这边再mark一下. get和set我个人理解本身只是一个语法糖,它定义的属性相当于“存储器属性” 为内部属性提供了一个方便习惯的读/写方式 ES5写法 func ...
随机推荐
- 快速搭建Docker Registry私有仓库
前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...
- Spring Cloud微服务集成配置中心
1. 搭建Spring Cloud Config配置中心(见上一篇博客) 2. 创建微服务项目bounter-simon-app,pom文件如下: <?xml version="1.0 ...
- 一位6年老Android面经总结
声明|作者:android进阶者地址:https://www.jianshu.com/p/d77873cbad5f 前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事 ...
- java----SVN
下载SVN server 安装服务器,注意需要配置端口和本地仓库 https://www.visualsvn.com/server/download/ 下载SVN client https://tor ...
- 设计模式 — 单例模式(Singleton)
在一个软件系统中,经常有有些特殊的对象就需要一个实例,如果有多个的话,就比较浪费服务器资源,最典型的就是 整个系统的配置文件对象. 普通方式读取配置文件 // 配置文件 SingletonApp.pr ...
- idea cpu 卡慢 占用100%
1.修改idea配置文件D:\ideaIU-2017.2\bin\idea.exe.vmoptions 如: -server -Xms800m -Xmx800m -XX:MaxPermSize=512 ...
- pg数据库查询表大小
查询单个表 select pg_size_pretty(pg_relation_size('table_name')); 按size大小排序列出所有表 SELECT table_schema || ' ...
- Unity 5.x动态加载光照信息(所有坑已踩)
能搜到这的应该是被新的烘焙系统坑了少时间,4.x到5.x美术必须重新烘焙,关于美术的没什么说的,只有---重新烘焙! 新的烘焙系统,为了兼容5.x的多场景编辑功能,将烘焙信息从mesh全部挪到了一个中 ...
- python序列化与反序列
python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...
- Linux的vim编辑器
vim编辑器常用的三种模式 vim /文件路径 进入编辑器,编辑该文件 例:vim /etc/passwd 命令行模式:在编辑器中直接输入命令 dd:删除光标所在的一行 ndd:删除光标所在的向下的n ...