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算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
随机推荐
- ecshop点击订购、加入按钮没反应的解决方法
今天做ecshop站的时候,测试数据,发现点击订购.加入按钮都没反应,网上搜索,有些人说是修改了common.js,我将原始版本复原也没反映.后来重新安装ecshop,仔细研究发现,原来头部文件pag ...
- empty,isset,is_null比较(差异与异同)
做php开发时候,想必在使用:empty,isset,is_null 这几个函数时候,遇到一些问题.甚至给自己的程序带来一些安全隐患的bug.很多时候,对于isset,empty都认为差不多.因此开 ...
- C++中string erase函数的使用
erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator p ...
- poj 3162 树DP+单调队列
http://acm.hust.edu.cn/vjudge/problem/11552 http://blog.csdn.net/woshi250hua/article/details/7727677 ...
- dos命令执行mysql的sql文件
1.cmd进入dos窗口 2.输入cd+ mysql的bin目录后进入bin文件下 3.进入控制台:mysql -uroot -proot 回车 4.选择数据库:use mydata go 回车 5 ...
- HDU5972Regular Number(ShiftAnd算法 bitset)
题意 题目链接 第一行的\(n\)表示模式串长度为\(n\) 接下来\(n\)行,每行开头有一个整数\(num\)表示匹配串中该位置的字符可以在\(num\)个桅子花出现,接下来输入这\(num\)个 ...
- mui打包vue项目
1,新建app项目,打包vue,修改config/index.js的输出路径 2,把build打包后的dist目录下的文件拷到app目录下 3.修改app下面的index文件,改变压缩格式,修改“/s ...
- 前端怎样学习react
这是一个很长的话题.....慢慢写
- Mysql学习第四天
1.跟用户相关的命令 (了解). DCL语句 1.1. 创建一个新的用户 CREATE USER 用户名@地址 IDENTIFIED BY '密码'; CREATE ...
- [转]Windows 下常用盗版软件的替代免费软件列表
当您看完这篇文章,我相信您完全可以把您 Windows 系统里安装的盗版软件清理干净而不影响您的任何工作.如果您仍然希望并且喜欢.享受做一个盗版软件用户的话,那也没有办法,但是请您记住,非常非常重要的 ...