您的位置:首页 > Web前端

阿里2017前端实习生笔试编程第一题

2017-04-25 22:55 459 查看
阿里2017实习生笔试时间一小时,这是两道编程题中的第一题,当时做题时时间不够,虽然知道怎么做,但是提交时的结果完全错误,最终原因还是自己对JavaScript掌握的不熟练,之后又花一小时把基本要求实现了,如下。

题目描述:做提的时候删了要求,但是具体要求大概是

1、不使用外部库

2、将<td>标签内的时间,更改为与给定的时间的差(给定时间维为:2017年4月1日 22:33:44)

3、如果相差大于一年,则改为N年前/后。

4、如果相差小于一年,大于一月,则改为N月前/后。

5、...

6、如果相差小于一分钟,则改为N秒前/后。

以下代码计算了相差相差多少天、小时、分钟、秒。没有区分月和年(如果计算月和年的话会比以下代码简单,删除一部分即可)。

代码存在的问题:

1、没有进行闰年的判断,每年默认365天。

2、没有判断大小月,每月默认30天。

<body>
<p>帖子发布时间 2017年4月1日 22:33:44</p>
<table>
<thead>
<tr>
<th>游戏名称</th>
<th>发售日</th>
</tr>
</thead>
<tbody>
<tr>
<td>火焰之纹章无双</td>
<td>待定</td>
</tr>
<tr>
<td>火焰之纹章无双</td>
<td>待定</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-03-09 14:08:22</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-01 22:08:22</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-01 23:08:22</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-01 22:33:46</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-01 14:08:22</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-05-19</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-20</td>
</tr>
<tr>
<td>火焰之纹章 回声 另一位英雄王</td>
<td>2017-04-20</td>
</tr>
<tr>
<td>火焰之纹章</td>
<td>2016-06-24</td>
</tr>
<tr>
<td>火焰之纹章</td>
<td>2013-04-19</td>
</tr>
<tr>
<td>火焰之纹章</td>
<td>2012-04-19</td>
</tr>
</tbody>
</table>
</body>
原网页显示结果:(添加了简单的css样式)



我的JavaScript代码:
< script > window.onload = function() {
var nowtime = ["2017", "04", "01", "22", "33", "44"];
var gettd = document.getElementsByTagName("td");
var arr = [];

for (let i = 0; i < gettd.length; i++) {
arr[i] = gettd[i].innerHTML;
arr[i] = arr[i].split(/[-\s:]/g);
var temp = 0;
var temp2 = 0;
if (nowtime[0] > arr[i][0]) {
temp += (nowtime[0] - arr[i][0]) * 365;
if (nowtime[1] > arr[i][1]) {
temp += (nowtime[1] - arr[i][1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] < arr[i][1]) {
temp -= (arr[i][1] - nowtime[1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] == arr[i][1]) {
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
} else if (nowtime[2] == arr[i][2]) {
//由第一层判断可知,不是同一年
}
}
} else if (nowtime[0] < arr[i][0]) {
temp += (arr[i][0] - nowtime[0]) * 365;
if (nowtime[1] > arr[i][1]) {
temp += (nowtime[1] - arr[i][1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] < arr[i][1]) {
temp -= (arr[i][1] - nowtime[1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] == arr[i][1]) {
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
} else if (nowtime[2] == arr[i][2]) {
//由第一层判断可知,不是同一年
}
}
} else if (nowtime[0] == arr[i][0]) {
if (nowtime[1] > arr[i][1]) {
temp += (nowtime[1] - arr[i][1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] < arr[i][1]) {
temp -= (arr[i][1] - nowtime[1]) * 30;
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
}
} else if (nowtime[1] == arr[i][1]) {
if (nowtime[2] > arr[i][2]) {
temp += (nowtime[2] - arr[i][2]);
} else if (nowtime[2] < arr[i][2]) {
temp -= (arr[i][2] - nowtime[2]);
} else if (nowtime[2] == arr[i][2]) {
//是同一天,继续判断时分秒。
temp2 = checkdetail(arr, nowtime, i);
}
}
}
if (arr[i][0] > 0) {
if (temp > 0) {
gettd[i].innerHTML = temp + "天前";
} else if (temp < 0) {
gettd[i].innerHTML = Math.abs(temp) + "天后";
}
}
if (arr[i][3] && arr[i][0] == nowtime[0] && arr[i][1] == nowtime[1] && arr[i][2] == nowtime[2]) {
gettd[i].innerHTML = temp2;
}
}
}
//判定年月日都相同时,判断时分秒
function checkdetail(arr1, now1, index) {
if (arr1[index][3] >= 0) {
if (now1[3] > arr1[index][3]) {
return (now1[3] - arr1[index][3]) + "小时前";
} else if (now1[3] < arr1[index][3]) {
return (arr1[index][3] - now1[3]) + "小时后";
} else if (now1[3] == arr1[index][3]) {
if (now1[4] > arr1[index][4]) {
return (now1[4] - arr1[index][4]) + "分钟前";
} else if (now1[4] < arr1[index][4]) {
return (arr1[index][4] - now1[4]) + "分钟后";
} else if (now1[4] == arr1[index][4]) {
if (now1[5] > arr1[index][5]) {
return (now1[5] - arr1[index][5]) + "秒前";
} else if (now1[5] < arr1[index][5]) {
return (arr1[index][5] - now1[5]) + "秒后";
}
}
}
}
} < /script>/处理后的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: