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 ...
随机推荐
- 从头开始学Maven【仓库】
仓库的分类 本地仓库 改setting.xml 文件中的 <localRepository/> 远程仓库 远程仓库的配置 远程仓库的认证 部署至远程仓库 中央仓库 在$M2_HOME/li ...
- python复习基本知识
print(x or y) """x or y ; x 为 true ,则返回x ,否则返回flase“”“” and 则相反 优先级比较:not > and &g ...
- Scyther
1.Security Protocol :a domain analysis 一个安全协议描述了很多的行为,每一个行为称为角色,例如触发角色和 接受角色,一个系统有多个通信代理组成,每一个代理扮演 ...
- 编辑请求内容 Charles
1 选中request, 右键选择 Breakpoints 2 再次运行edit request, excute, edit response. excute
- [原创]Xilinx Vivado 2017.4/2018.3/2016.4/2015.4/ISE14.7下载及其安装
最新版本Vivado 2018.3下载地址 链接:https://pan.baidu.com/s/17aE-vICRQYN27bD2sXCLxg提取码:ilg5 由于工程需要,下载VIVADO2018 ...
- 【JAVA】HashMap的原理及多线程下死循环的原因
再次翻到以前工作中遇到的一个问题,HashMap在多线程下会出现死循环的问题,以前只是知道会死循环,导致CPU100%把机器拖跨,今天来彻底看看 首先来看下,HashMap的原理:HashMap是一个 ...
- 网络远程唤醒 WOL Magic Packet
Magic Packet Magic Packet白皮书介绍: The basic technical details of Magic Packet Technologyare simple and ...
- RabbitMQ原理图
一.RabbitMQ 原理图 二.Rabbit 交换器讲解 1 Direct 交换器(发布与订阅 完全匹配) 1.2搭建环境 1 ...
- BP神经网络综合评价法
BP神经网络综合评价法是一种交互式的评价方法,一种既能避免人为计取权重的不精确性, 又能避免相关系数求解的复杂性,还能对数量较大且指标更多的实例进行综合评价的方法,它可以根据用户期望的输出不断修改指标 ...
- python:PATH、PYTHONPATH 和 sys.path 的区别
python:PATH.PYTHONPATH 和 sys.path 的区别 共同点 所有在它们的路径里面的 moduel 都可以被 import PATH 在 PATH 中的一些命令,例如 *.exe ...