Friendly Date Ranges-freecodecamp算法题目
Friendly Date Ranges
1.要求
- 把常见的日期格式如: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 即可
2.思路
- 定义日期格式检测函数checkDate
- 定义要替换文本的月份和日期末尾数组
- 定义change函数,在不改变原有格式的情况下只替换要改变的文本
- 在主函数中判断check过和change过的日期的各种形式,在不同日期形式下利用.push()方法将日期更改为易读的正确格式
3.代码
function checkDate(val){
if(parseInt(val[0].substr(0,4))<=parseInt(val[1].substr(0,4))){
return true;
}
}
var date=['0','st','nd','rd','th'];
var month=['0','January','February','March','April','May','June','July','August','September','October','November','December'];
function change(val){
var temp1=val[0].split('-');
var temp2=val[1].split('-');
temp1[1]=month[parseInt(temp1[1])];
temp2[1]=month[parseInt(temp2[1])];
var te1=temp1[2].substr(-1,1);
var te2=temp2[2].substr(-1,1);
if(te1==='0'){
te1=4;
}
if(te2==='0'){
te2=4;
}
if(temp1[2].length==2&&temp1[2].substr(0,1)==='1'){
te1=4;
}
if(temp2[2].length==2&&temp2[2].substr(0,1)==='1'){
te2=4;
}
if(parseInt(te1)<4){
temp1[2]=parseInt(temp1[2])+date[parseInt(te1)];
}
else{
temp1[2]=parseInt(temp1[2])+date[4];
}
if(parseInt(te2)<4){
temp2[2]=parseInt(temp2[2])+date[parseInt(te2)];
}
else{
temp2[2]=parseInt(temp2[2])+date[4];
}
val[0]=temp1;
val[1]=temp2;
return val;
}
function makeFriendlyDates(arr) {
var result=[];
if(checkDate(arr)){
arr=change(arr);
if(arr[0][0]==arr[1][0]&&arr[0][1]==arr[1][1]&&arr[0][2]==arr[1][2]){//年月日相等,不去2017
var f1=[];
var f11=[];
f1.push(arr[0][1]);
f1.push(arr[0][2]);
result.push(f1.join(' '));
result.push(arr[0][0]);
f11.push(result.join(', '));
result=f11;
}
else if(arr[0][0]==arr[1][0]&&arr[0][1]==arr[1][1]){//年月相等
if(parseInt(arr[0][0])==2017&&parseInt(arr[1][0])==2017){
var r1=[];
r1.push(arr[0][1]);
r1.push(arr[0][2]);
result.push(r1.join(' '));
result.push(arr[1][2]);
}
else{ }//年月相等但不是2017年 暂不写
}
else if(arr[0][0]==arr[1][0]){//年相等 只按测试条目写,都是2017的时候
var f2=[];
var f22=[];
var f222=[];
f2.push(arr[0][1]);
f2.push(arr[0][2]);
f222.push(f2.join(' '));
f22.push(arr[1][1]);
f22.push(arr[1][2]);
f222.push(f22.join(' '));
result=f222;
}
else if(parseInt(arr[0][0])==2017){ //第一项是2017年
var f31=[];
var f32=[];
var f3=[];
f31.push(arr[0][1]);
f31.push(arr[0][2]);
f3.push(f31.join(' '));
f32.push(arr[1][1]);
f32.push(arr[1][2]);
f3.push(f32.join(' '));
result=f3;
}
else if(parseInt(arr[1][0])==2017){
var f41=[];
var f42=[];
var f43=[];
var f4=[];
f41.push(arr[0][1]);
f41.push(arr[0][2]);
f43.push(f41.join(' '));
f43.push(arr[0][0]);
f4.push(f43.join(', '));
f42.push(arr[1][1]);
f42.push(arr[1][2]);
f4.push(f42.join(' '));
result=f4;
}
else if(parseInt(arr[1][0])-parseInt(arr[0][0])==1){
if ((arr[0][1]==arr[1][1]) && (parseInt(arr[0][2])>parseInt(arr[1][2]))){
var f51=[];
var f52=[];
var f510=[];
//var f520=[];
var f5=[];
f51.push(arr[0][1]);
f51.push(arr[0][2]);
f510.push(f51.join(' '));
f510.push(arr[0][0]);
f5.push(f510.join(', '));
f52.push(arr[1][1]);
f52.push(arr[1][2]);
f5.push(f52.join(' '));
result=f5;
}
else{
var f61=[];
var f62=[];
var f610=[];
var f620=[];
var f6=[];
f61.push(arr[0][1]);
f61.push(arr[0][2]);
f610.push(f61.join(' '));
f610.push(arr[0][0]);
f6.push(f610.join(', '));
f62.push(arr[1][1]);
f62.push(arr[1][2]);
f620.push(f62.join(' '));
f620.push(arr[1][0]);
f6.push(f620.join(', '));
result=f6;
}
}
else{
var f71=[];
var f72=[];
var f710=[];
var f720=[];
var f7=[];
f71.push(arr[0][1]);
f71.push(arr[0][2]);
f710.push(f71.join(' '));
f710.push(arr[0][0]);
f7.push(f710.join(', '));
f72.push(arr[1][1]);
f72.push(arr[1][2]);
f720.push(f72.join(' '));
f720.push(arr[1][0]);
f7.push(f720.join(', '));
result=f7;
}
return result;
}
}
makeFriendlyDates(['2017-01-02', '2017-01-05']);
makeFriendlyDates(["2008-10-31", "2009-10-31"]);
4.相关链接
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/split
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substr
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt
Friendly Date Ranges-freecodecamp算法题目的更多相关文章
- Map the Debris -freecodecamp算法题目
Map the Debris 1.要求 返回一个数组,其内容是把原数组中对应元素的平均海拔转换成其对应的轨道周期. 原数组中会包含格式化的对象内容,像这样 {name: 'name', avgAlt: ...
- js-FCC算法Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- FCC(ES6写法) Friendly Date Ranges
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 包含当前年份和相同月份的时候,makeFri ...
- Friendly Date Ranges 让日期区间更友好
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果 ...
- Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- Spinal Tap Case -freecodecamp算法题目
Spinal Tap Case 1.要求 将字符串转换为 spinal case. Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也 ...
- Search and Replace -freecodecamp算法题目
Search and Replace 1.要求 使用给定的参数对句子执行一次查找和替换,然后返回新句子. 第一个参数是将要对其执行查找和替换的句子. 第二个参数是将被替换掉的单词(替换前的单词). 第 ...
- [优化]Steamroller-freecodecamp算法题目
晚上在medium看到一篇关于找工作的文章,里面提到一个面试题目--flattening an array(扁平化数组).这我好像在哪看过!应该是freecodecamp里的算法某一题.翻了下博客记录 ...
- LeetCode算法题目解答汇总(转自四火的唠叨)
LeetCode算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
随机推荐
- typescript的lambads解决this关键字找不到属性
var people = { name: ["abc", "jack", "pepter", "jim"], getna ...
- Ajax原理实现
jQuery的ajax实现原理: // 1.创建一个XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 2.打开请求 xhr.open('METHO ...
- Linux apache 添加 mod_rewrite模块
apache已安装完毕,手动添加mod_rewrite模块 #find . -name mod_rewrite.c //在apache的源码安装目录中寻找mod_rewrite.c文件 #cd mo ...
- HDU 5384——Danganronpa——————【AC自动机】
Danganronpa Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- c++隐式类型转换和explicit
什么是隐式转换? 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了哪些 ...
- JavaFX--第3天窗口布局
1.windows之间的交互 2.关闭程序 3.布局镶嵌 1.windows之间的交互 我们要实现“确定”.“取消”之类的功能:就像我们平时使用Word的时候要关闭会提示要不要保存的信息. 步骤如下: ...
- Java中的阻塞队列-ArrayBlockingQueue(一)
最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...
- 浏览器警告:provisional headers are shown
做项目的时候遇到一个问题 后台JAVA,每次发送的都有一次拦截,去转发到登录页面的url 有一个请求是https的,被拦截后显示发生了错误,浏览器警告:provisional headers are ...
- js获取农历日期【转】
var CalendarData=new Array(100); var madd=new Array(12); var tgString="甲乙丙丁戊己庚辛壬癸"; var dz ...
- Android - 页面返回上一页面的三种方式
今年刚刚跳槽到了新公司,也开始转型做Android,由此开始Android的学习历程. 最近在解很多UI的bug,在解bug过程中,总结了在UI的实现过程中,页面返回上一页面的几种实现方式. 一. 自 ...