Math 和 Date
- Math 是 js 的一个内置对象,提供了一堆的方法帮助我们操作 数字
- Date 是 js 的一个内置对象,提供了一堆的方法帮助我们操作 时间
一.Math
-
是一个数学对象
-
属性: Math.PI表示圆周率 ,E常量
-
方法:用console.log(Math)可以打印所用的Math方法
- 1.Math.random() 随机数(随机产生0-1之间的数,包含0,不包括1)
Math.random()
- 2.Math.round() 取最近的整数(四舍五入)
Math.round(10.1) // 10 Math.round(10.6) // 11
- 3.Math.ceil() 五入,向上取整
Math.ceil(10.14) // 11 Math.ceil(10.9) // 11
- 4.Math.floor() 四舍,向下取整
Math.floor(10.14) // 10 Math.floor(10.9) // 10
- 5.Math.max() 向下参数是多个数字,求最大数字
Math.max(1, 2, 3, 4, 5) // 5拿到参数的最大值 Math.max([10,30,20,40,100]); // NaN Math.max(['10','30','20','40','100']); // NaN
- 6.Math.min() 参数是多个数字,求最小数字Math.pow(底数,指数) 求幂
Math.min(1, 2, 3, 4, 5) // 1
- 7.Math.pow(底数X,指数Y) 求幂,次幂,X的y次幂
- 8.Math.sqrt() 开根号,开方
- 9.Math.abs() 求绝对值,取正数(无论正数还是负数都取正数)
math.abs(num) // 10
- 10.Math.sin(弧度) 正弦函数 以弧度表示的角;角度变为弧度:角度值*2π/360
- 11.Math.cos(弧度) 余弦
- 12.Math.Tan(x) 正切
-
正弦勾股定理:
Math.sqrt(Math.pop(3,2) + Math.pop(4,2))
-
补充:如何得到范围随机数Math.rondom(),0-1
1.如何得到范围随机数Math.floor(Math.random() * (max-min+1) ) + min 2.如何得到范围随机数parseInt(Math.random()*(m - n)) + n 3. 0-5之间的顺机数:Math.round(Math.random( ) *5 ) 4. 0-5之间的顺机数(取整):parseInt(Math.random( ) *6;parseInt(Math.random( ) *5 + 1) 5.3-5之间的随机数: 3+ Math.round(Math.random( ) *2) 6.生成a-b之间的随机数:Math.rondom()*(b+1-a)+a
-
补充思考:如何利用Math.max()得到数组当中的最大值???
//思考:如何利用Math.max()得到数组当中的最大值?????
var arr = [1,2,3,4];
var val = arr.join(',');
console.log(val)
var info = Math.max(val);
console.log(info);
二.Date日期对象,用来获取当前系统日期
- js 提供的内置构造函数,专门用来获取时间的
- date是本地对象,本地对象的特点是不能直接使用,这仅仅是个类方法(类似于函数),需要new执行后才能使用
- 方法
- 1.New Date:创建一个日期对象 含义后期再加上
- 2.getFullYear();//年
- 3.getMonth(); //月,月从0开始的(0-11)
- 4.getDate(); //日,日也是从0开始的(0-6)
- 5.getHours(); //时
- 6.getMinutes(); //分
- 7.getSeconds(); //秒
- 8.getMilliseconds();//毫秒
- 9.getTime() 格林威治时间,从1970年1月1日0时0分0秒距离日期的毫秒数
- 10.toLocaleString() 把时间对象变成一个字符串
- 11.Date.parse(time) 将日期转换为毫秒数
- 日期对象代码
//当前的时间
var time = new Date();
console.log(time);//Thu Nov 07 2019 09:41:25 GMT+0800 (中国标准时间)
//年
var my_year = time.getFullYear();
console.log(my_year)
//月
var my_month = time.getMonth();
console.log(my_month);
//日
var my_date = time.getDate();
console.log(my_date)
//时
var my_hours = time.getHours();
console.log(my_hours)
//分
var my_minutes = time.getMinutes();
console.log(my_minutes)
//秒
var my_seconds = time.getSeconds();
console.log(my_seconds)
//毫秒
var my_mii = time.getMilliseconds();
console.log(my_mii)
//从1970年1月1日0时0分0秒距离日期的毫秒数
console.log(time.getTime())
//把时间对象变成一个字符串
console.log(time.toLocaleString())
// 需求: 存在一个存储时间的字符串,如何拿到字符串当中的年月日时分秒
// 1. 获取时间字符串
var time = "2019-11-1 08:30";
// 2. 将时间字符串转换为时间戳
var info = Date.parse(time);
console.log(info)
//3. 将时间戳传入Date构造函数当中
var a = new Date(info);
console.log(a);
// console.log(a.getFullYear())
//计算2个数的差值
var time1 = "2019-11-7 09:30";
var b = Date.parse(time1);
console.log(b-a)
2.1 设置日期对象
-
直接设置:简单粗暴,但必须整体设置
- new Date(要设置的数据)`
- 字符:一个参数,直接设置,不允许日期溢出,否则会无效的日期,没有设置的部分,为0
var d = new Date("2008.8.8"); var d = new Date("2008/8/8"); var d = new Date("2008-8-8"); var d = new Date("2008,8,8"); var d = new Date("2008 8 8"); var d = new Date("2008.14.8 8:8"); var d = new Date("2008.8.8 8:8");
- 数值:多个参数,直接设置,月份从0开始,日期溢出,向前进1,没有设置的部分,为0
var d = new Date(2008,8,8); var d = new Date(2008,7,8); var d = new Date(2008,15,8); var d = new Date(2008,15,8); var d = new Date(2008,15,8,20,8,8);
-
通过方法设置:单独设置,采取日期对象的系列方法:set系列
//繁琐,但可以针对性设置 //没有设置的部分,采取当前日期,月份从0开始,溢出部分,向前进1 d.setFullYear(2008); d.setMonth(14); d.setDate(8); d.setHours(8); d.setMinutes(8); d.setSeconds(8); d.setMilliseconds(666);
-
还可以独立设置时间戳
- d.setTime(从1970…到要设置的日期的毫秒数)
2.2获取时间差
- 是指获取两个时间点之间相差的时间
- 在 js 中是不能用时间直接做 减法 的
- 我们需要一些特殊的操作
- 在编程的世界里面,有一个特殊的时间,是
1970年01月01日00时00分00秒
- 这个时间我们叫做
格林威治时间
- 所有的编程世界里面,这个时间都是一样的,而且
格林威治时间
的数字是 0 - 从
格林威治时间
开始,每经过1毫秒,数字就会 + 1 - 所以我们可以获取到任意一个时间节点到
格林威治时间
的毫秒数 - 然后在用两个毫秒数相减,就能得到两个时间点之间相差的毫秒数
- 我们在通过这个毫秒数得到准确的时间
2.3 计算时间差
- 例如:我们现在计算一下
2019-01-01 00:00:00
到2019-01-03 04:55:34
的时间差
-
先获取两个时间点到
格林威治时间
的毫秒数var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() console.log(time1) // 1546272000000 console.log(time2) // 1546462534000
-
两个时间相减,得到两个时间点之间相差的毫秒数
var differenceTime = time2 - time1 console.log(differenceTime) // 190534000
- 现在我们计算出了两个时间点之间相差的毫秒数
-
把我们计算的毫秒数换算成时间
-
先计算出有多少天
-
以为一天是
1000 * 60 * 60 * 24
毫秒 -
用总的毫秒数除以一天的毫秒数,就能得到多少天了
var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() var differenceTime = time2 - time1 // 计算整的天数 var day = differenceTime / (1000 * 60 * 60 * 24) // 2.20525462962963 day = Math.ceil(day) // 2
- 因为得到的是有小数的天数,我们向下取整,得到有多少个整的天数
-
使用
differenceTime
减去两天所包含的毫秒数,剩下的就是不够一天的毫秒数 -
用不够一天的毫秒数计算出有多少个小时
-
因为一个小时是
1000 * 60 * 60
毫秒 -
用不够一天的毫秒数除以一小时的毫秒数,就能得到多少小时了
var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() var differenceTime = time2 - time1 // 计算整的天数 var day = differenceTime / (1000 * 60 * 60 * 24) // 2.20525462962963 day = Math.floor(day) // 2 // 计算整的小时数 var afterHours = differenceTime - (1000 * 60 * 60 * 24 * 2) var hours = afterHours / (1000 * 60 * 60) hours = Math.floor(hours) // 4
- 和刚才一样的道理,我们需要向下取整
-
同理,使用
afterHours
- 4个小时包含的毫秒数,剩下的就是不够一个小时的毫秒数 -
用不够一个小时的毫秒数计算出有多少分钟
-
因为一分钟是
1000 * 60
毫秒 -
用不够一个小时的毫秒数除以一分钟的毫秒数就能得到多少分钟了
var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() var differenceTime = time2 - time1 // 计算整的天数 var day = differenceTime / (1000 * 60 * 60 * 24) // 2.20525462962963 day = Math.floor(day) // 2 // 计算整的小时数 var afterHours = differenceTime - (1000 * 60 * 60 * 24 * 2) var hours = afterHours / (1000 * 60 * 60) hours = Math.floor(hours) // 4 // 计算整分钟数 var afterMinutes = afterHours - (1000 * 60 * 60 * 4) var minutes = afterMinutes / (1000 * 60) minutes = Math.floor(minutes) // 55
-
和之前一样的道理计算出秒
var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() var differenceTime = time2 - time1 // 计算整的天数 var day = differenceTime / (1000 * 60 * 60 * 24) // 2.20525462962963 day = Math.floor(day) // 2 // 计算整的小时数 var afterHours = differenceTime - (1000 * 60 * 60 * 24 * 2) var hours = afterHours / (1000 * 60 * 60) hours = Math.floor(hours) // 4 // 计算整分钟数 var afterMinutes = afterHours - (1000 * 60 * 60 * 4) var minutes = afterMinutes / (1000 * 60) minutes = Math.floor(minutes) // 55 // 计算整秒数 var afterSeconds = afterMinutes - (1000 * 60 * 55) var seconds = afterSeconds / 1000 seconds = Math.floor(seconds) // 34
-
最后,同理减去整秒的数,剩下的就是毫秒数
var time1 = new Date('2019-01-01 00:00:00') var time2 = new Date('2019-01-03 04:55:34') time1 = time1.getTime() time2 = time2.getTime() var differenceTime = time2 - time1 // 计算整的天数 var day = differenceTime / (1000 * 60 * 60 * 24) // 2.20525462962963 day = Math.floor(day) // 2 // 计算整的小时数 var afterHours = differenceTime - (1000 * 60 * 60 * 24 * 2) var hours = afterHours / (1000 * 60 * 60) hours = Math.floor(hours) // 4 // 计算整分钟数 var afterMinutes = afterHours - (1000 * 60 * 60 * 4) var minutes = afterMinutes / (1000 * 60) minutes = Math.floor(minutes) // 55 // 计算整秒数 var afterSeconds = afterMinutes - (1000 * 60 * 55) var seconds = afterSeconds / 1000 seconds = Math.floor(seconds) // 34 // 计算毫秒数 var milliSeconds = afterSeconds - (1000 * 34) // 0
-
最后我们把结果输出一下就可以了
document.write('2019-01-01 00:00:00 和 2019-01-03 04:55:34 之间相差') document.write(day + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒' + milliSeconds + '毫秒')
-