js获取当前时间(nodejs获取当前时间)

序有时,您需要构建一个JavaScript倒计时钟。你可能有活动,销售,促销或游戏。您可以使用原始的JavaScript来构建时钟,而无需寻找最近的插件。虽然有

仅用18行JavaScript实现一个倒数计时器

有时,您需要构建一个JavaScript倒计时钟。你可能有活动,销售,促销或游戏。您可以使用原始的JavaScript来构建时钟,而无需寻找最近的插件。虽然有很多很棒的时钟插件,但是使用原始的JavaScript可以带来以下好处:

您的代码将是轻量级的,因为它将具有零依赖性。您的网站将表现更好。您无需加载外部脚本和样式表。您将拥有更多控制权。您将构建时钟,使其行为完全符合您希望的方式(而不是尝试将插件弯曲到您的意愿)。

因此,毫不拖延地,下面就告诉你如何只用18行JavaScript就能制作出自己的倒计时钟。

仅用18行JavaScript实现一个倒数计时器

基本时钟:特定日期或时间的倒计时。

以下是创建一个基本时钟的步骤概述:

设置有效的结束日期。计算剩余时间。将时间转换为可用格式。将时钟数据输出为可重复使用的对象。在页面上显示时钟,并在时钟为零时停止时钟。

设置有效的结束日期。

首先,您需要设置一个有效的结束日期。这应该是JavaScript的Date.parse()方法可以理解的任何格式的字符串。例如:

在ISO 8601格式中:

const deadline = '2015-12-31';

简短格式:

const deadline = '31/12/2015';

或者,长格式:

const deadline = 'December 31 2015';

每种格式都允许您指定准确的时间和时区(ISO日期的UTC偏移量)。例如:

const deadline = 'December 31 2015 23:59:59 GMT+0200';

在本文中,您可以阅读更多关于JavaScript中的日期格式的内容。

计算剩余时间

下一步是计算剩余时间。我们需要编写一个函数,它需要一个表示给定结束时间的字符串(如上所述)。然后,我们计算这个时间和当前时间的时间差。看起来是这样的:

function getTimeRemaining(endtime){ const total = Date.parse(endtime) - Date.parse(new Date()); const seconds = Math.floor( (total/1000) % 60 ); const minutes = Math.floor( (total/1000/60) % 60 ); const hours = Math.floor( (total/(1000*60*60)) % 24 ); const days = Math.floor( total/(1000*60*60*24) ); return { total, days, hours, minutes, seconds };}

首先,我们创建一个变量total来保存截止日期前的剩余时间。函数的作用是:将时间字符串转换成毫秒值。这使得我们可以减去两次,得到两次之间的时间。

const total = Date.parse(endtime) - Date.parse(new Date());

将时间转换成可用的格式。

现在,我们要将毫秒转换成天、小时、分钟和秒。让我们以秒为例:

const seconds = Math.floor( (t/1000) % 60 );

我们来分析一下这里发生了什么。

将毫秒除以1000可转换为秒: (t/1000)将总秒数除以60,然后取余数。您不希望所有的秒数,仅需要计算分钟数之后剩下的秒数:(t/1000) % 60四舍五入到最接近的整数。这是因为您需要完整的秒数,而不是几分之一秒:Math.floor( (t/1000) % 60 )

重复此逻辑,将毫秒转换为分钟、小时和天。

将时钟数据输出为可重复使用的对象

经过几天、几小时、几分钟和几秒钟的准备,我们现在可以将数据作为可重用对象返回:

return { total, days, hours, minutes, seconds};

这个对象允许你调用一个函数并获得任何计算值。这是一个如何获得剩余时间的例子:

getTimeRemaining(deadline).minutes

方便吗?

显示时钟,当它到达零时停止

现在我们有了一个函数,可以用剩下的几天、几小时、几分钟和几秒钟,我们可以构建一个时钟。首先,我们将创建以下HTML元素来保存时钟:

<div id="clockdiv"></div>

然后,我们将编写一个函数,在新的div中输出时钟数据:

function initializeClock(id, endtime) { const clock = document.getElementById(id); const timeinterval = setInterval(() => { const t = getTimeRemaining(endtime); clock.innerHTML = 'days: ' + t.days + '<br>' + 'hours: '+ t.hours + '<br>' + 'minutes: ' + t.minutes + '<br>' + 'seconds: ' + t.seconds; if (t.total <= 0) { clearInterval(timeinterval); } },1000);}

这个函数有两个参数。这些是包含我们时钟的元素的id,以及倒计时的结束时间。在函数内部,我们将声明一个时钟变量,并使用它来存储对时钟容器div的引用。这意味着我们不必一直查询DOM。

接下来,我们将使用setInterval每秒执行一次匿名函数。该功能将执行以下操作:

计算剩余时间。将剩余时间输出到我们的div。如果剩余时间为零,请停止计时。

此时,剩下的唯一一步就是像这样运行时钟:

initializeClock('clockdiv', deadline);

恭喜你!现在,您有了一个只有18行JavaScript的基本时钟。

准备显示时钟

在设置时钟样式之前,我们需要做一些改进。

消除初始延迟,使您的时钟立即显示。提高时钟脚本的效率,以免持续重建整个时钟。根据需要添加前导零。

消除初始延迟

在时钟中,我们习惯于按setInterval每秒更新一次显示。在大多数情况下,这是好的,除非在开始时有一秒钟的延迟。为了消除这种延迟,我们必须在间隔开始之前更新一次时钟。

让我们把将要传递给setInterval的匿名函数移到它自己的独立函数中。我们可以将这个函数命名为updateClock。在updateClock外部调用函数setInterval,然后在内部再次调用setInterval。这样,时钟显示没有延迟。

在您的JavaScript中,将其替换为:

const timeinterval = setInterval(() => { ... },1000);

有了这个:

function updateClock(){ const t = getTimeRemaining(endtime); clock.innerHTML = 'days: ' + t.days + '<br>' + 'hours: '+ t.hours + '<br>' + 'minutes: ' + t.minutes + '<br>' + 'seconds: ' + t.seconds; if (t.total <= 0) { clearInterval(timeinterval); }}updateClock(); // run function once at first to avoid delayvar timeinterval = setInterval(updateClock,1000);

避免连续重建时钟。

我们需要使时钟脚本更加高效。我们只想更新时钟中的数字,而不是每秒重建整个时钟。实现这一点的一种方法是将每个数字放在一个span标记中,然后只更新这些span的内容。

这是HTML:

<div id="clockdiv"> Days: <span class="days"></span><br> Hours: <span class="hours"></span><br> Minutes: <span class="minutes"></span><br> Seconds: <span class="seconds"></span></div>

现在让我们参考这些元素。在clock定义变量的位置后添加下面的代码

const daysSpan = clock.querySelector('.days');const hoursSpan = clock.querySelector('.hours');const minutesSpan = clock.querySelector('.minutes');const secondsSpan = clock.querySelector('.seconds');

接下来,我们需要更改updateClock函数并更新数字。新代码如下:

function updateClock(){ const t = getTimeRemaining(endtime); daysSpan.innerHTML = t.days; hoursSpan.innerHTML = t.hours; minutesSpan.innerHTML = t.minutes; secondsSpan.innerHTML = t.seconds; ...}

添加前导零

现在时钟不再每秒重建一次,我们还有另一件事要做:添加前导零。例如,不是让时钟显示7秒,而是显示07秒。一个简单的方法是在数字的开头加上字符串“0”,然后截掉最后两位数字。

例如,要将前导零添加到“秒”值,您可以这样更改:

secondsSpan.innerHTML = t.seconds;

对此:

secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

如有必要,还可以在分钟和小时后添加前导零。如果你已经走到这一步,恭喜你!现在可以显示您的时钟了。

注意:您可能需要在CodePen中点击“重新运行”来开始倒计时。

进一步地

下面的例子演示了如何为一些用例扩展时钟。都是基于上面看到的基本例子。

自动时钟装置

假设我们希望时钟在某些日子显示,而不是在其他日子。例如,我们可能有一系列事件,不想每次都手动更新时钟。这是提前安排事情的方法。

将其display属性设置为在CSS中隐藏clock none。然后将以下内容添加到initializeClock函数中(在以开头的行后添加var clock)。一旦initializeClock调用此函数,将导致时钟只显示:

clock.style.display = 'block';

接下来,我们可以指定时钟显示的日期。这将替换截止日期变量:

const schedule = [ ['Jul 25 2015', 'Sept 20 2015'], ['Sept 21 2015', 'Jul 25 2016'], ['Jul 25 2016', 'Jul 25 2030']];

计划数组中的每个元素代表一个开始日期和一个结束日期。如上所述,可以包括时间和时区,但是我在这里使用了简单的日期来保持代码的可读性。

最后,当用户加载页面时,我们需要检查它是否在指定的时间范围内。这段代码应该替换前面对initializeClock函数的调用。

// iterate over each element in the schedulefor (var i=0; i<schedule.length; i++) { var startDate = schedule[i][0]; var endDate = schedule[i][1]; // put dates in milliseconds for easy comparisons var startMs = Date.parse(startDate); var endMs = Date.parse(endDate); var currentMs = Date.parse(new Date()); // if current date is between start and end dates, display clock if (endMs > currentMs && currentMs >= startMs ) { initializeClock('clockdiv', endDate); }}schedule.forEach(([startDate, endDate]) => { // put dates in milliseconds for easy comparisons const startMs = Date.parse(startDate); const endMs = Date.parse(endDate); const currentMs = Date.parse(new Date()); // if current date is between start and end dates, display clock if (endMs > currentMs && currentMs >= startMs ) { initializeClock('clockdiv', endDate); }});

现在,您可以提前安排时钟,而无需手动更新。您可以根据需要缩短代码。为了便于阅读,我把自己写得很长。

将计时器设置为用户到达后10分钟。

在用户到达或开始一个特定的任务后,有必要在给定的时间内设置倒计时。我们在这里将计时器设置为10分钟,但是您可以使用任何时间。

我们需要做的就是用这个变量替换deadline:

const timeInMinutes = 10;const currentTime = Date.parse(new Date());const deadline = new Date(currentTime + timeInMinutes*60*1000);

这段代码将占用当前时间并增加十分钟。这些值将被转换为毫秒,因此它们可以被加在一起,成为一个新的截止日期。

现在,我们有了一个可以从用户到达的时间开始倒计时10分钟的时钟。随意发挥,尝试不同长度的时间。

保持跨页面的时钟进度。

有时,有必要保持时钟状态超过当前页面。如果我们想在整个网站上设置一个10分钟的计时器,我们不想在用户转到其他页面时重置它。

一种解决方案是将时钟的结束时间保存在cookie中。这样,导航到新页面不会将结束时间重置为当前的十分钟。

这是逻辑:

如果Cookie中记录了截止日期,请使用该截止日期。如果不存在该cookie,则设置一个新的截止日期并将其存储在cookie中。

为此,请将变量替换为以下deadline:

let deadline;// if there's a cookie with the name myClock, use that value as the deadlineif(document.cookie && document.cookie.match('myClock')){ // get deadline value from cookie deadline = document.cookie.match(/(^|;)myClock=([^;]+)/)[2];} else { // otherwise, set a deadline 10 minutes from now and // save it in a cookie with that name // create deadline 10 minutes from now const timeInMinutes = 10; const currentTime = Date.parse(new Date()); deadline = new Date(currentTime + timeInMinutes*60*1000); // store deadline in cookie for future reference document.cookie = 'myClock=' + deadline + '; path=/; domain=.yourdomain.com';}

这段代码使用了cookie和正则表达式,它们本身是独立的主题。因此,我在此不再赘述。需要注意的一点是,您需要将yourdomain.com更改为实际的域。

关于客户端事件的重要警告

JavaScript日期和时间是从用户的计算机上获得的。这意味着用户可以通过改变计算机上的时间来影响JavaScript时钟。大多数情况下,这并不重要。但是,在一些超级敏感的情况下,需要从服务器获取时间。可以使用一些PHP或Ajax来完成,这两者都超出了本教程的范围。

从服务器获得时间后,我们可以使用本教程中相同的技术来使用它。

总计

在阅读了本文中的示例后,您现在知道如何用几行原始JavaScript代码创建自己的倒计时器了!我们已经研究了如何制作一个基本的倒计时钟,并有效地显示它。我们还介绍了添加一些有用的附加功能,包括调度、绝对时间和相对时间,以及使用Cookie来保持页面和站点访问之间的状态。

完全码

<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>Countdown Clock</title><style type="text/css"> body{ text-align: center; background: #00ECB9; font-family: sans-serif; font-weight: 100;}h1{ color: #396; font-weight: 100; font-size: 40px; margin: 40px 0px 20px;}#clockdiv{ font-family: sans-serif; color: #fff; display: inline-block; font-weight: 100; text-align: center; font-size: 30px;}#clockdiv > div{ padding: 10px; border-radius: 3px; background: #00BF96; display: inline-block;}#clockdiv div > span{ padding: 15px; border-radius: 3px; background: #00816A; display: inline-block;}.smalltext{ padding-top: 5px; font-size: 16px;} </style></head><body> <h1>Countdown Clock</h1><div id="clockdiv"> <div> <span class="days"></span> <div class="smalltext">Days</div> </div> <div> <span class="hours"></span> <div class="smalltext">Hours</div> </div> <div> <span class="minutes"></span> <div class="smalltext">Minutes</div> </div> <div> <span class="seconds"></span> <div class="smalltext">Seconds</div> </div></div><script type="text/javascript"> function getTimeRemaining(endtime) { const total = Date.parse(endtime) - Date.parse(new Date()); const seconds = Math.floor((total / 1000) % 60); const minutes = Math.floor((total / 1000 / 60) % 60); const hours = Math.floor((total / (1000 * 60 * 60)) % 24); const days = Math.floor(total / (1000 * 60 * 60 * 24)); return { total, days, hours, minutes, seconds };}function initializeClock(id, endtime) { const clock = document.getElementById(id); const daysSpan = clock.querySelector('.days'); const hoursSpan = clock.querySelector('.hours'); const minutesSpan = clock.querySelector('.minutes'); const secondsSpan = clock.querySelector('.seconds'); function updateClock() { const t = getTimeRemaining(endtime); daysSpan.innerHTML = t.days; hoursSpan.innerHTML = ('0' + t.hours).slice(-2); minutesSpan.innerHTML = ('0' + t.minutes).slice(-2); secondsSpan.innerHTML = ('0' + t.seconds).slice(-2); if (t.total <= 0) { clearInterval(timeinterval); } } updateClock(); const timeinterval = setInterval(updateClock, 1000);}const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);initializeClock('clockdiv', deadline);</script></body></html>

推荐的JavaScript经典范例学习资料文章

用图文并茂的方式详细介绍JavaScript的运行机制

“一个轻量级的JavaScript全文搜索库,轻松实现站内离线搜索”

推荐给Web程序员的15个常用源代码编辑器

“值得收藏”的10个实用JS技巧

“精细的269个JavaScript函数,让你加班熬夜(1)“值得收藏”

“精细的269个JavaScript函数,让你加班熬夜(2)“值得收藏”

“精细的269个JavaScript函数,让你加班熬夜(3)“值得收藏”

“精细的269个JavaScript函数,让你加班熬夜(4)“值得收藏”

“精细的269个JavaScript函数,让你加班熬夜(5)“值得收藏”

“精细的269个JavaScript函数,让你加班熬夜(6)“值得收藏”

深入JavaScript教你如何防止内存泄漏

手把手教你7个有趣的JavaScript项目——第一部分“带源代码”

手把手教你7个有趣的JavaScript项目——下面是源代码。

JavaScript使用mediaDevices API来访问相机自拍

教你如何在前端代码中出错并上报给JS。

文章《让你彻底了解移动前端和Web前端的区别》

63个JavaScript常规礼包“值得收藏”

提高JavaScript技能的10个问题和答案

“JavaScript图表库的5大选择”

“彻底理解JavaScript中Object.freeze和Object.seal的用法”

Visual JS:动态图演示——事件循环的过程

教你如何利用动态规划和贪婪算法实现前瀑布布局的“练习”。

Visual js:动态图演示的过程承诺& Async/Await

可以拖动原生JS包中的验证滑块吗?“实践”

如何实现高性能的在线PDF预览

用字体库加密数据的细节——仿58同城

Node.js要结束了吗?》

Pug 3.0.0正式发布,不再支持Node.js 6/8。

"纯JS手写轮播图(代码逻辑清晰易懂)"

20年来JavaScript中文版的建立标准

60多种前端“JS”常用的工具和方法值得收藏

5箭头功能和常规功能的区别

通过发布/订阅设计模式理解Node.js的核心模块事件

“前端文章”不再被规律性所困扰

发布“Fast Wai”node . js v 14 . 3 . 0以支持顶级Await和REPL增强功能

“深入详细的浏览器原理流程图”

JavaScript已经进入第三时代,未来将何去何从?》

“在前端上传之前预览文件图像、文本、json、视频和音频的练习”

深入探讨EventLoop与浏览器渲染、帧动画、空空闲回调的关系。

推荐13个有用的JavaScript数组技术“值得收藏”

前端基础知识:window.location详解

不要再依赖普通人了

《犀牛之书:最被遗忘的JavaScript特性》的作者

“工作中常用的36个JavaScript函数片段值得收藏”

“节点+H5实现大文件碎片上传和断点续传”

《了解文档上传全过程(1.8w字深度解析)》前端高级必需品

【实践总结】关于小程序挣脱枷锁实现批量上传

手把手教你各种前端文件上传策略和大文件断点续传。

字节跳动面试官:请实现一个大文件上传和断点续传。

谈文件上传下载的前端事情【练习】

教你如何写一个前端图像压缩,方向校正,预览和上传插件。

最完整的JavaScript模块化方案和工具

前端高级JS中的内存管理

JavaScript正则化深度和10个非常有趣的常规实践

一个经常被前端面试官忽略的JavaScript面试问题

一行JS代码实现简单的模板字符串替换“练习”

“JS代码如何压缩”前端高级高级

前端开发规范:命名规范、html规范、css规范、js规范

[规范]前端团队代码规范的最佳实践

100个原生JavaScript代码片段的知识点详细总结【练习】

前端174个JavaScript知识点总结(一)

前端174个JavaScript知识点汇总(二)

前端174个JavaScript知识点汇总(三)

一些很有意思的javascript知识点总结【练习】

都2020年了,还不会修饰JavaScript?》

JavaScript实现图片合成和下载

70个JavaScript知识点的详细总结(第一部分)[练习]

70个JavaScript知识点的详细总结(第二部分)[练习]

开源一个JavaScript版本的敏感词过滤库。

送你43个JavaScript面试问题

“3个伟大的利基JavaScript库,你值得拥有”

手把手教你巩固JavaScript知识体系【思维导图】。

推荐的7大JavaScript产品步骤指南库

Echa教你彻底理解JavaScript执行机制。

一名合格的中级前端工程师需要掌握的28项JavaScript技能

深入分析高频项目使用知识点的总结[JS]。

JavaScript工具函数大全[新]

从JavaScript查看设计模式(摘要)

身份证号的正则表达式和验证(JavaScript,Regex)。

“在浏览器中实现JavaScript定时器的4种创新方法”

《Three.js动态效果图》

《手把手教你59种常用JS方法》

“127个常用的JS代码片段,每个代码需要30秒才能理解——【第1部分】”

以简单的方式解释js深度拷贝与轻度拷贝

手把手教你JS开发H5游戏【毁灭星辰】

用简单的术语解释一下JS中this/apply/call/bind的巧妙运用【练习】

教你如何在JS中全方位解读这其中的真谛【练习】

“书用了你就恨少了,一大波JS开发工具功能来了”

“干货满满!如何优雅简洁地实现时钟翻转器(支持JS/Vue/React)”

手把手教你六种JS异步编程的方案【练习】

减少加班的15个高效JS技能知识点总结【练习】。

手把手教你JS开发H5游戏【黄金矿工】

手把手教你JS实现监控浏览器上下左右滚动。

JS经典例题知识点的整理和总结【练习】

“26000字JS干货分享,带你领略前端魅力【基础篇】”

“26000字JS干货分享,带你领略前端魅力【实践】”

让你的JS写得更漂亮的简单步骤

恭喜JS这个的详细处方

谈文件上传下载的前端事情【练习】

教你绕过面试中关于JavaScript范围的5个坑

Jquery插件(公共插件库)

如何防止ajax请求的重复发送

用JavaScript+Canvas实现自定义画板

延续在JS“前端”中的应用

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/122424.html

发表回复

登录后才能评论