13.Math数学 和 Date时间方法

这篇博客详细介绍了JavaScript中的Math对象和Date对象。Math对象提供了如random、round、sqrt等数学运算方法,而Date对象则用于处理时间,包括获取年、月、日等信息以及设置和计算时间差。通过Date对象的getTime方法可以获取到时间点距1970年1月1日的毫秒数,从而进行时间差的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:002019-01-03 04:55:34 的时间差
  1. 先获取两个时间点到 格林威治时间 的毫秒数

    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
    
  2. 两个时间相减,得到两个时间点之间相差的毫秒数

    var differenceTime = time2 - time1
    console.log(differenceTime) // 190534000
    
    • 现在我们计算出了两个时间点之间相差的毫秒数
  3. 把我们计算的毫秒数换算成时间

    • 先计算出有多少天

    • 以为一天是 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 + '毫秒')
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值