【Javascript Day10】Math对象、Math随机数、时间对象
Math对象
console.log("圆周率:", Math.PI );
// 对小数进行格式化
var num1 = 58.667;
console.log("截断式取整", parseInt(num1) );
// Math.floor() 地板函数 - 小数 向下取整
console.log("舍去小数(截断式取整):", Math.floor(num1) );
// Math.ceil() 天花板函数 - 小数 向上取整
var num2 = 58.000000000001;
console.log("有小数则+1:",Math.ceil(num2));
// Math.round() 四舍五入版
var num3 = 23.4567;
console.log( "四舍五入:",Math.round(num3) );
var num4 = 23.5123;
console.log( "四舍五入:",Math.round(num4) );
// Math.abs() 绝对值 - 将负数转换为正数
var num5 = 99.999;
console.log("绝对值:",Math.abs(num5));
Math.abs
var num6 = -99.999;
console.log("绝对值:",Math.abs(num6));
// Math.max( ...args ) 求最大值
// Math.min( ...args ) 求最小值
// JS api 文档中方法参数前出现 ... 表示任意长度的参数数量
// var nums = [1,2,3,4,5]
// console.log( Math.max( nums ) ); // NaN
var maxNum = Math.max( 23,76,84,56 );
var minNum = Math.min( 23,76,84,56 );
console.log(maxNum);
console.log(minNum);
Math随机数
// 随机数
// 1. 伪随机:语言提供的随机函数都是伪随机 -> 是使用固定的代码规则生成
// 2. 真随机:数值生成无规律可循环
// Math.random() 获取范围在[0,1)内的随机值
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
// 需要生成一个 [1,10) 之间的随机整数
// var num = Math.random()*10; // [0,10) 小数
// var num = Math.random()*10+1; // [1,11) 小数
// var num = Math.random()*9; // [0,9) 小数
// var num = Math.random()*9+1; // [1,10) 小数
var num = Math.floor( Math.random()*9 ) + 1; // [1,10) 整数
console.log(num);
// 需要生成一个 [min,max) 之间的随机整数 max>min
// Math.floor( Math.random()*(max-min) ) + min;
// 需要生成一个 [3,10] 之间的随机整数
// var num1 = Math.random() // [0,1) 小数
var num1 = Math.floor( Math.random()*8 ) // [0,8) 整数 -> [0,7]
var num1 = Math.floor( Math.random()*8 ) + 3 // [3,10]
// 需要生成一个 [min,max] 之间的随机整数 max>min
// Math.floor( Math.random()*(max-min + 1) ) + min;
function randomInt(min,max){
return Math.floor( Math.random()*(max-min+1) ) + min;
}
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
console.log( randomInt(3,11) );
时间对象
// var user = {
// name:"tom",
// age:23
// }
// console.log(user); // 对象标准的输出格式 { …… }
// js 提供了一个构造函数 Date , 该函数用于创建一个时间对象
// 为什么时间需要以对象方式存储? 用于时间计算,或单独获取对应的值
// var time1 = "2012-12-23"
var day1 = new Date(); // 创建了一个时间对象 - 默认创建时间对象记录的是当前计算机的时间
console.log(day1); // Fri Jan 17 2025 13:46:33 GMT+0800 (中国标准时间) // ISO标准时间格式//19行
// JS中存在一个对象在 console.log 时会自动调用 toString() 方法 => 将对象转换为字符串
console.log( day1.toString() ); // 等同于 19 行操作
var str = day1.toLocaleString(); // 基于计算机语言转换为本地时间
console.log(str);
var date = day1.toLocaleDateString() // 基于计算机语言转换为只有日期的格式
console.log(date);
var time = day1.toLocaleTimeString() // 基于计算机语言转换为只有时间的格式
console.log(time);
独立时间值获取(返回的是数值)
// getFullYear() 获取完整年份
console.log( day1.getFullYear() );
// getMonth() 获取月份 0~11
console.log( day1.getMonth() );
// getDate() 获取日 从 1 开始
console.log( day1.getDate() );
// getHours() 获取小时 24小时制
console.log( day1.getHours() );
// getMinutes() 获取分钟
console.log( day1.getMinutes() );
// getSeconds() 获取秒
console.log( day1.getSeconds() );
// getMilliseconds() 获取毫秒,毫秒是以 1000 为进制
console.log( day1.getMilliseconds() );
var timeStr = `${day1.getFullYear()}年${day1.getMonth()+1}月${day1.getDate()}日`
+ ` ${day1.getHours()}:${day1.getMinutes()}:${day1.getSeconds()}`;
console.log(timeStr);
// getDay() 返回星期几 - 数值 - 0~6
var weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
console.log( day1.getDay() );
console.log( weeks[ day1.getDay() ] );
// getTime() 返回完整毫秒值 【相距于1970/01/01 08:00:00的毫秒差】
console.log( day1.getTime() );
时间对象时间设定
var day1 = new Date(); // 获取当前系统的时间 => 时间对象
var day2 = Date.now(); // 获取当前系统的时间 => 毫秒值
console.log(day1);
console.log(day2);
// 指定时间创建时间对象
// new Date( 年,月,日,时,分,秒 )
// 1970,0,1,0,0,0
var day3 = new Date(2022,2,3,14,23,45);
console.log( day3.toLocaleString() );
var day4 = new Date(2022,2,3);
console.log( day4.toLocaleString() );
var day4 = new Date(2022,2);
console.log( day4.toLocaleString() );
// new Date(毫秒值)
var day4 = new Date(2022); // 2022 => 毫秒 + 1970/01/01 8:0:0
console.log( day4.toLocaleString() );
var day5 = new Date("2022/01/02 23:11:23");
console.log( day5.toLocaleString() );
var day6 = new Date("2022-12-23 16:15:23");
console.log( day6.toLocaleString() );
var day7 = new Date("2022/01/02");
console.log( day7.toLocaleString() );
// 字符时时间定义,必须从年月日开始
// 如果无法转换返回 内容为 Invalid Date 的对象
var day8 = new Date("16:15:23");
if(day8=="Invalid Date"){
console.log("时间格式不合法");
}else{
console.log( day8.toLocaleString() );
}
var day9 = new Date("2022");
console.log( day9.toLocaleString() );
var nowDay = new Date();
console.log( nowDay.toLocaleString() );
// 时间对象的每个独立的 get 取值方法,都有一个对应的赋值方法
nowDay.setFullYear(1999);
console.log( nowDay.toLocaleString() );
nowDay.setMonth(4);
console.log( nowDay.toLocaleString() );
// 赋值规则会基于时间规则进行计算进位或退位
nowDay.setMonth(12);
console.log( nowDay.toLocaleString() );
nowDay.setMonth(-2);
console.log( nowDay.toLocaleString() );
// 2004 年 2月
var d = new Date("2004/3");
d.setDate(0); // 向前退1天
console.log( d.toLocaleString() );
console.log( d.getDate() );
练习
输入两个日期,遵循“三天打鱼两天晒网”规则,计算这两个日期中打鱼和晒网的天数并输出
var start = new Date("2023/11/5")
var end = new Date("2025/1/17")
function calculate(start ,end){
var gap = ((end - start)/86400000);
var a = gap % 5;
if (a <= 3){
var b = 0;
var d = a;
}
else{
var b = a -3
var d = 3;
}
var c = Math.floor( gap / 5 );
return{
fish: 3*c + d,
dry: 2*c + b
}
}
console.log(calculate(start ,end))