Date、Error
1.Date
1.作用:保存一个日期或事件,提供操作日期和时间的API
2.创建方法:
1.获取系统当前日期和时间
let now = new Date();
注意:只能获取客户端本地时间,无法获取服务器时间
2.自定义日期和时间
let now = let Date("yyyy/MM/dd hh:mm:ss");
3.将ms转换为客户端日期对象
let date = new Date(ms);
在网络间传输时间或在服务器存储时间,都用整数(毫秒数/秒数)
4.复制一个日期对象
let date2 = new Date(date1); //将date1里的日期复制给date2
原因:因为日期计算都默认直接修改原日期对象
练习:设置一个时间,计算当前时间距离设置的时间的天时分秒
let end = new Date("2020/11/16 12:00"); let now = new Date(); //从客户端获取时间 let s=parseInt((end-now)/1000); let d=parseInt(s/(60*60*24)); let h=parseInt(s%(60*60*24)/3600); let m=parseInt(s%3600/60); s=s%60; document.write("距离指定时间还有:"+d+"天"+h+"小时"+m+"分"+s+"秒");
3.API
1.单位
FullYear Month Date Day --都没有s结尾
Hours Minutes Seconds Milliseconds --都有s结尾
2.每个单位都有一对getxxx()/setxxx()方法
getxxx()负责获取单位的数值
比如:now.getFullYear() //2020
now.getHours() //11
setxxx()负责修改指定单位的数值
比如:now.setFullYear(2022)
now.setDate(20)
其中:setxxx(n)
n可以是任意值,setxxx(n)可自动调整时间进制
注意:day没有setDay()方法,因为day是推算出来的
3.取值范围
Month:0~11
注意:js中的月份比现实中小1,读取或修改时,可能需要+1或-1
Date:1~31
Day:0~6 日~六
Hours:0~23
Minutes/Second:0~59
4.日期计算
1.两日期对象可直接相减:结果是毫秒差
2.对任意单位做加减:
先取值:let d=now.getDate();
做加减:d+=30;
放回去:now.setDate(d); //setxxx()可自动调整时间进制
注意:setxxx() 会直接修改原日期对象
解决:先复制副本,再用副本计算
简写:now.setDate(now.getDate()+30);
5.将日期转为字符串
date.toString(); 转化为当地时间的完整格式 date.toLocaleStirng(); 转化为当地时间的简化版格式 date.toLocaleDateString(); 简化版格式,仅保留日期部分 date.toLocaleTimeString(); 简化版格式,仅保留时间部分 date.toGMTString(); 转化为国际标准时间 自定义格式化日期函数
练习:自定义一个函数,可以输出当前时间格式为 2020年09月02日 星期三 上午09:08
function format(n){ let date=new Date(); let y,M,d,day,a,h,m; let week=["日","一","二","三","四","五","六"]; y=date.getFullYear(); M=date.getMonth()+1; M<10&&(M="0"+M); d=date.getDate(); d<10&&(d="0"+d); day=week[date.getDay()]; a=date.getHours()<12?"上午":"下午"; h=date.getHours(); h>12&&(h-=12); h<10&&(h="0"+h); m=date.getMinutes(); m<10&&(m="0"+m); return y+"年"+M+"月"+d+"日 星期"+day+" "+a+h+":"+m; } console.log(format(new Date()));
2.Error
1.错误定义:程序执行过程中,导致程序无法正常执行的异常情况
错误处理:即使程序出错,也保证程序不会强行退出的机制
2.语法
try{
可能出错的正确代码
}catch(err){ //err:错误对象,发生错误时,自动创建的保存错误信息的对象
只有发生错误时,才执行的错误处理代码
错误发生后应该做:1.提示用户 2.保存进度 3.记录日志
}
问题:放在try…catch中的代码,执行效率可能降低,且生成错误对象,占用内存空间
解决:如果可以提前预知错误,则首选 if…else…来提前预防错误
3.错误类型
SyntaxError:语法错误 ReferenceError:引用错误,要用的变量没找到 TypeError:类型错误,错误的使用了对象的方法或 () 或 [] RangeError:范围错误,参数超范围 URIError: URI错误, 如果请求所使用的url拼接错误 EvalError:Eval错误
4.抛出错误
函数的作者向函数的调用者抛出自定义错误对象,告知调用者错误的使用了函数
语法:throw new Error("自定义错误提示信息");
练习:设置一个函数可以自定义四舍五入位数的函数,练习抛出错误功能
function round(num,d){ if(!isNaN(num)&&!isNaN(d)){ num*=Math.pow(10,d); return Math.round(num)/Math.pow(10,d); }else{ throw new TypeError("必须输入数字!"); } } //引用函数 let num=prompt("请输入一个数字"); let d=prompt("请输入小数位数"); if(!isNaN(num)&&!isNaN(d)){ console.log(round(num,d)); }else{ alert("必须输入数字"); } console.log("程序继续执行");

浙公网安备 33010602011771号