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算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
随机推荐
- Java基础16-类与对象
1.如何创建一个类 public class Person{ //属性 String name; String genter; int age; //方法 public void eat(){ Sys ...
- 最新版本dede与discuz通过ucenter完美整合
人合租虚拟主机.然后到相关的官方网站上面下载相关的程序,我下载的是DedeCmsV5.7-GBK+Discuz_X2_RC_SC_GBK+UCenter_1.6.0_SC_GBK这个程序组合.涉及到怎 ...
- 参数化拼接in查询条件,个人备份
/// <summary> /// 查询数据报表 /// </summary> /// <param name="Tr ...
- 显示器分辨率不同,部分winform控件在其他机器上显示不全
在开发机器上效果如下: 而到其他电脑上效果如下: 解决办法: 将窗体的AutoScaleMode属性设置为None,尝试一下,应该可以了. 关于AutoScaleMode的属性,可以参考 http:/ ...
- C#Winform中ToolTip的简单用法,
ToolTip它能够为我们的软件提供非常漂亮的提示信息,提高软件的可用性,给用户比较好的体验. 使用,在窗体加载时加载以下代码: var toolTip1 = new ToolTip(); toolT ...
- wamp环境初步使用
在wamp的www目录下部署页面,localhost/目录/index.html
- 栅格那点儿事(一)---Raster是个啥子东西
Raster是个啥子东西 现如今,不仅是在遥感应用中能看到花花绿绿的影像了,在GIS应用中也能随处看到她们的身影.在各种在线地图中,卫星影像作为底图与矢量的道路层叠加:高程DEM作为高程来源实现地形的 ...
- jquery-ui sortable 排序
https://blog.csdn.net/u013066244/article/details/51954198 <link ref="stylesheet" href ...
- 如何找到Android app启动activity和页面元素信息
在实施app自动化的时候,我们需要知道app 的启动activity和页面元素信息,以此启动app和定位页面元素,那么如何在没有源码的情况下找打他们呢?当然是有好的工具啦,有Android sdk自带 ...
- SaberSama【css总结】
为什么要转过来呢? 因为我觉到,同样是一个初学者,应该互相学习,交流. css:Cascading Style Sheets 层叠样式表 CSS引入方式: 1.内嵌: <p style=&quo ...