摘要:混合使用计算时分秒本文出自从零到壹全栈部落作者黎跃春追时间的人简介是推出的一个天挑战。完整中文版指南及视频教程在从零到壹全栈部落。效果图第天挑战的内容主要是如何将一系列的加起来,最终计算总时间,总时间用时分秒显示。
Day18 - Reduce、Map混合使用计算时分秒
效果图本文出自:从零到壹全栈部落
作者:©黎跃春-追时间的人
简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 18 篇。完整中文版指南及视频教程在 从零到壹全栈部落。
第18天挑战的内容主要是如何将一系列的data-time加起来,最终计算总时间,总时间用时分秒显示。
HTML、CSS代码Adding Up Times with Reduce
//获取整个 li NodeList
let items = document.querySelectorAll("ul li");
//创建一个空数组,存储所有data-time字符串
let itemtimearray = [];
//通过for循环将每个li中的data.time添加到 itemtimearray 数组中
for (let item of items) {
itemtimearray.push(item.dataset.time);
}
//遍历itemtimearray数组,返回一个新的数组
let spiltitmes = itemtimearray.map(item => {
//通过 : 将字符串拆分成数组
let temp = item.split(":");
//返回对象包涵分和秒的对象
return {
min: temp[0],
sencond: temp[1]
}
});
//初始化分和秒
let totalMin = 0;
let totalSec = 0;
//通过reduce函数将spiltitmes数组中所有的min叠加并存储到totalMin中
totalMin = spiltitmes.reduce((total, time) => {
return total += parseInt(time.min);
}, 0);
//通过reduce函数将spiltitmes数组中所有的sencond叠加并存储到totalSec中
totalSec = spiltitmes.reduce((total, time) => {
return total += parseInt(time.sencond);
}, 0);
//求余计算秒
let finalSecond = parseInt(totalSec % 60);
//计算一共多少分钟
let finalMin = parseInt(totalMin + (totalSec / 60)) % 60;
//计算一共多少小时
let finalHour = parseInt((totalMin + (totalSec / 60)) / 60);
//输出时分秒
console.log(`共${finalHour}小时,${finalMin}分钟,${finalSecond}秒。`);
方法二
// 1. [...items] => 将其展开为数组
// 2. Array.from(items) => 使用Array.from()将items转换为数组
// 获取所有节点
// 3. const timeNodes = Array.from(document.querySelectorAll("[data-time]"));
// 4. parseFloat:
// [].map(parseFloat) => [].map(function(x) {retunr parseFloat(x)});
// 获取所有的带有data-time属性的节点
const timeNodes = Array.from(document.querySelectorAll("[data-time]"));
const seconds = timeNodes
//返回一个包涵所有data-time值的数组
.map(node => node.dataset.time)
//返回一个将data-time解析成秒的数组
.map(timeCode => {
//timeCode为 1:43 这样格式的字符串
//timeCode.split(":") 返回一个新数组,数组里面装的是分和秒的时间
//[].map(parseFloat) => [].map(function(x) {retunr parseFloat(x)});
const [mins, secs] = timeCode.split(":").map(parseFloat);
//将分乘以60+秒,计算所有的秒,并返回
return (mins * 60) + secs;
})
//将数组中的所有的秒叠加并返回
.reduce((total, vidSeconds) => total + vidSeconds);
//通过求余取整计算时分秒
let secondsLeft = seconds;
const hours = Math.floor(secondsLeft / 3600);
secondsLeft = secondsLeft % 3600;
const mins = Math.floor(secondsLeft / 60);
secondsLeft = secondsLeft % 60;
//打印输出
console.log(hours, mins, secondsLeft);
完结:所有代码解释在代码注释中。
源码下载Github Source Code
| 全栈部落 | 区块链部落 |
|---|---|
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84761.html
摘要:更新今天又发现了一种简单的方法可以直接对年月日时分秒进行操作,假如今天那么所得昨天为昨天的时间前天的时间其中,函数为扩展函数。 1、时间格式化 1 //昨天的时间 2 var day1 = new Date(); 3 day1.setTime(day1.getTime()-24*60*60*1000); 4 var s1 = day1.getFullYear()+- + (da...
阅读 1255·2025-12-16 16:43
阅读 2386·2023-04-25 22:58
阅读 1765·2021-09-22 15:20
阅读 2959·2019-08-30 15:56
阅读 2516·2019-08-30 15:54
阅读 2761·2019-08-29 12:31
阅读 3063·2019-08-26 13:37
阅读 856·2019-08-26 13:25