JavaScript学习之 倒计时
倒计时很常见,例如离XX活动还有XX天XX小时XX分XX秒,然后逐秒减少,实现很简单,我只是想记录这过程中的一点小坑。
先上代码:
<html>
<head>
<meta charset="UTF-8" >
<title>task0002_2</title>
</head>
<body>
<input id="input-date" type="text" />
<button id="btn">点击</button>
<p>
距离<span id="show-date">YYYY年MM月DD日</span>还有<span id="time-different">XX天XX小时XX分XX秒</span>
</p> <script src="./js/util.js"></script>
<script src="./js/task0002_2.js"></script>
</body>
</html>
在按照xxxx-xx-xx这样的格式输入之后,点击按钮,下面就开始倒计时。
实现思路很简单:按照输入的时间转换成Date,然后获取现在的时间,两个时间相减,再转换成以天/时/分/秒为单位的就好了。
现在看看我的JS代码,我没有做格式错误的判断,默认输入的时间格式是正确的。
addEvent($("#btn"), "click", displayTime); // addEvent是我自己封装的函数,其实就是元素的事件绑定
function displayTime() {
var $inputDate = $("#input-date").value; // 获取日期字符串
var date = new Date(Date.parse($inputDate)); // 用日期字符串构造Date
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
console.log(date.toString());
var str = date.getFullYear().toString() + "年" + (date.getMonth()+1).toString() + "月" + date.getDate().toString() + "日";
$("#show-date").innerHTML = str;
display(date);
}
// 倒计时
function display(date) {
var nowDate = new Date();
console.log(nowDate.toString());
var diffTime = date.getTime() - nowDate.getTime(); // 相减后单位是毫秒
var remain = diffTime % parseInt(1000 * 3600 * 24); // 1000 * 3600 * 24, 因为单位是毫秒,这就是1天的毫秒数了,不需要自己算,列个公式出来就好,取余的意思就是剩下的毫秒数不够一天,继续算还剩多少小时,下面以此类推
var diffDate = Math.floor(diffTime / (1000 * 3600 * 24)); // 还剩多少天
var diffHour = Math.floor(remain / (1000 * 3600));
remain = remain % (1000 * 3600);
var diffMinute = Math.floor(remain / (1000 * 60));
remain = remain % (1000 * 60);
var diffSecond = Math.floor(remain / (1000));
var str = diffDate + "天" + diffHour + "时" + diffMinute + "分" + diffSecond + "秒";
$("#time-different").innerHTML = str;
// 如果不够1秒就继续倒数,否则停止
if (remain > 1000) {
setTimeout(display, 1000, date);
}
}
上面代码基本上很好懂的,下面说一下要注意的地方:
1.parse() 返回的是1970年1月1日午夜到指定日期(字符串)的毫秒数。我上面的默认是到指定日期的00:00的倒计时,所以构造了Data要setHours(),否则默认是的8点
2.JavaScript中除法的结果默认是浮点数,就是我console.log(2/3);出来的结果是0.66666666,需要使用Math.floor向下取整
3.setTimeout要带参数,注意不要直接setTimeout(display(date), 1000);这样写,setTimeout详见JavaScript学习之setTimeout
4.getFullYear() 从 Date 对象以四位数字返回年份,所以最好就不要用getYear()。getMonth() 从 Date 对象返回月份是(0 ~ 11),所以记得加一。
JavaScript学习之 倒计时的更多相关文章
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”
Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...
- JavaScript学习(3):函数式编程
在这篇文章里,我们讨论函数式编程. 什么是函数式编程?根据百度百科的描述,“函数式编程是种编程典范,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 λ 演算(lambda calculus). ...
- JavaScript学习(2):对象、集合以及错误处理
在这篇文章里,我们讨论一下JavaScript中的对象.数组以及错误处理. 1. 对象 对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作. 1.1 属性 ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
随机推荐
- Oracle时间日期处理方法
https://www.cnblogs.com/plmm/p/7381496.html 1.用于截取年.月.日.时.分.秒 extract()函数 extract(year from sysdate) ...
- Win10操作系统安装—U盘作为启动盘—系统安装到固态硬盘中
利用U盘作为启动盘安装win10操作系统 1.U盘制作为启动盘,制作工具,我选择的是大白菜(个人觉得还是很好用的) 大白菜http://www.bigbaicai.com/rjjc/syjc/3269 ...
- Leetcode400Nth Digit第N个数字
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字. 注意: n 是正数且在32为整形范围内 ( n < 231). 示例 1: ...
- 威胁快报|首爆新型ibus蠕虫,利用热门漏洞疯狂挖矿牟利
一.背景 近日阿里云安全团队发现了一起利用多个流行漏洞传播的蠕虫事件.黑客首先利用ThinkPHP远程命令执行等多个热门漏洞控制大量主机,并将其中一台“肉鸡”作为蠕虫脚本的下载源.其余受控主机下载并运 ...
- js 表格合并
1.合并 function autoRowSpan(tbid, row, col) { var tb = document.getElementById(tbid); var lastValue = ...
- 【python之路29】python生成器generator与迭代器
一.python生成器 python生成器原理: 只要函数中存在yield,则函数就变为生成器函数 #!usr/bin/env python # -*- coding:utf-8 -*- def xr ...
- bzoj 1059 [ZJOI2007]矩阵游戏——匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1059 发现不管怎么换,同一列的元素还是在同一列,同一行的元素还是在同一行. 所以必要条件是每 ...
- Browsersync 浏览器自动刷新
Browsersync 是一个很好用的工具,它可以实时监测文件的变动然后自动刷新浏览器,不用每次去点刷新或F5,特别在调试样式时非常有用. browsersync中文网 http://www.bro ...
- redis异常-MISCONF Redis is configured to save RDB snapshots
在eclipse中用java代码通过jedis操作redis的时候,报这个错: redis.clients.jedis.exceptions.JedisDataException: MISCON ...
- SPFA(Bellman-Ford队列优化)
原理:队列+松弛操作 将源点加入队尾,每一步读取队头顶点u,并将队头顶点u出队(记得消除标记):将与点u相连的所有点v进行松弛操作,如果能更新距离(即令d[v]变小),那么就更新,另外,如果点v没有在 ...