Date:
什么是: 专门封装一个时间,并提供操作事件的API
何时: 今后只要保存和操作时间
如何:
创建: 4种:
1. 创建日期对象,同时获得当前系统时间:
var now=new Date();
强调: 获取的是客户端本地时间
2. 创建日期对象,封装自定义时间
var date=new Date("yyyy/MM/dd hh:mm:ss");
new Date(yyyy,MM-1,dd,hh,mm,ss);
3. 使用毫秒数创建:
var date=new Date(ms); //ms转换当地时区时间
何时: 今后服务器上存储时间都是用毫秒数
因为不用考虑时区问题
客户端就需要用new Date将毫秒数转为当地时区对应的时间显示。
4. 复制一个日期:
var date1=new Date("xxx");
var date2=new Date(date1);
何时: 因为日期的计算都是直接修改原日期对象
所以旧时间无法保留
如果希望同时保留计算前后的两个时间时
就必须先将原日期复制一个副本,再用副本计算
原理: 其实日期对象中保存的是一个毫秒数
从1970年1月1日0点至今
//获取当前时间距离1970/1/1日的毫秒数
console.log(now.getTime());
//计算机中最大的数值:
console.log(Number.MAX_VALUE);
API:
单位: FullYear Month Date Day
Hours Minutes Seconds Milliseconds
1. 每个单位都有一对儿getXXX/setXXX方法
其中: getXXX() 负责获取指定单位的值
setXXX(n) 负责设置指定单位的新值
setXXX(n)可自动根据n调整进制
比如: getDate() setDate(n)
特例: Day没有setDay()方法,星期不允许修改
2. 取值范围: 月中的日(date) 从1~31结束,
其余都是从0开始到进制-1结束:
Month: 0~11 比现实少1
Date: 1~31
Day: 0~6
hours: 0~23
minutes/seconds: 0~59
计算: 2种:
1. 两日期对象可直接相减,结果是毫秒差
何时: 计算倒计时
2. 对一个日期的任意单位做加减:
3步: 1.取值, 2.计算, 3.放回去
其实可简化为: date.setXXX(date.getXXX()+n)
日期的格式化:
date.toString() 将日期转为当地时间的完整格式
date.toLocaleString() 将日期转为当地时间的简化格式
date.toLocaleDateString() 仅保留日期部分
date.toLocaleTimeString() 仅保留时间部分
date.toGMTString(); 将当地时间转为0时区标准时间
以下是自己尝试写的关于续签合同日期计算的小程序:
//创建日期对象hiredate:2018/9/30
var hiredate=new Date("2018/9/30");
//复制hiredate到到期时间enddate中
var enddate=new Date(hiredate);
//将enddate+3年
enddate=enddate.setFullYear(enddate.getFullYear()+3);
//复制enddate到续签时间renewdate
var renewdate=new Date(enddate);
//将renewdate-1月
renewdate=renewdate.setMonth(renewdate.getMonth()-1);
//如果renewdate是周六
if(renewdate.getDay()==6){
//renewdate-1天
renewdate=renewdate.setDate(renewdate.getDate()-1);
}
//否则,如果renewdate是周日
else if(renewdate.getDay()==0){
//renewdate-2天
renewdate=renewdate.setDate(renewdate.getDate()-2);
}
//复制renewdate到提醒时间alertdate
var alertdate=new Date(renewdate);
//将alertdate-7天
alertdate=alertdate.setDate(alertdate.getDate()-7);
console.log(
"到期时间:"+enddate,
"续签时间:"+renewdate,
"提醒时间:"+alertdate
);
运行时报错:
经过一番调试,终于发现问题所在,setMonth之类的date对象的API返回值不是date对象,所以再将其赋给renewdate时,数据类型发生变化。所以在if判断条件中会报错getDay()不是一个函数,因为这里renewdate已经不是date对象。
//创建日期对象hiredate:2018/9/30
var hiredate=new Date("2018/9/30");
//复制hiredate到到期时间enddate中
var enddate=new Date(hiredate);
//将enddate+3年
enddate.setFullYear(enddate.getFullYear()+3);
//复制enddate到续签时间renewdate
var renewdate=new Date(enddate);
//将renewdate-1月
renewdate.setMonth(renewdate.getMonth()-1);
//如果renewdate是周六
if(renewdate.getDay()==6){
//renewdate-1天
renewdate.setDate(renewdate.getDate()-1);
}
//否则,如果renewdate是周日
else if(renewdate.getDay()==0){
//renewdate-2天
renewdate.setDate(renewdate.getDate()-2);
}
//复制renewdate到提醒时间alertdate
var alertdate=new Date(renewdate);
//将alertdate-7天
alertdate.setDate(alertdate.getDate()-7);
console.log(
"到期时间:"+enddate,
"续签时间:"+renewdate,
"提醒时间:"+alertdate
);
执行结果如下:
希望我的问题能给大家带来帮助。
|
请发表评论