1. Date:
什么是: 存储一个时间,并提供操作时间的API
何时: 只要在程序中存储或计算时间都用日期对象
如何:
创建: 4种:
1. 创建日期对象,并自动获得当前系统时间:
var now=new Date();
强调: 因为js是在客户端执行,所以new Date()只能获得客户端系统时间。
2. 创建日期对象,并保存自定义时间:
var date=new Date(“yyyy/mm/dd hh:MM:ss”);
3. 复制一个日期对象:
var date2=new Date(date1)
4. 将毫秒数,转化为当地时间:
var date=new Date(ms)
何时: 将数据库中保存的毫秒数,转化为人能看懂的日期对象,且换算成当地时间。
本质: 计算机中日期对象中保存的不是字符串,而是一个毫秒数。1970年1月1日(0时区国际标准时间)至今的毫秒数
字符串的缺点: 1. 受时区影响; 2. 不便于计算
毫秒数的优点: 1. 不受时区影响;2. 极其便于计算
缺点: 人看不懂!
所以,今后数据库中保存时间都用毫秒数
API: 3句话:
1. 8个单位:
FullYear Month Date Day
Hours Minutes Seconds Milliseconds
2. 每个单位上都有一对儿get/set方法
其中: getXXX() 专门用于获取单位的值
setXXX(num) 专门用于设置单位的值
强调: setXXX(num) 可自动计算时间进制
Day没有set, 因为星期几不能随便改
3. 取值范围:
Month: 0~11 计算机中的月份都比现实中小1
Date: 1~31
Day: 0~6
Hours: 0~23
Minutes/Seconds: 0~59
计算: 2种:
1. 两日期对象可相减: 结果是毫秒差
2. 对任意单位做加减: 3步:
1. 取值: var d=now.getDate(); //22
2. 计算: d+=60 //82
3. set回去: now.setDate(d); //setXXX可自动调整进制
强调: setXXX()直接修改原日期对象
如果想同时保存计算前后的两个日期对象,应该在计算之前复制原日期对象的副本,再用副本计算新日期
简写: date.setXXX(date.getXXX()+n)
格式化:
.toString() 转为当地时间的完整格式
.toLocaleString() 转为当地时间的简化格式
.toLocaleDateString() 当地时间的简化格式,仅保留日期部分
.toLocaleTimeString() 当地时间的简化格式,仅保留时分秒部分
.toGMTString() 转为国际标准时间(0时区)
上个例子:
<script>
var hiredate=new Date("2012/6/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是周六就-1天
if(renewdate.getDay()==6)
renewdate.setDate(renewdate.getDate()-1);
//否则如果renewdate是周日就-2天
else if(renewdate.getDay()==0)
renewdate.setDate(renewdate.getDate()-2);
console.log(hiredate.toLocaleString());
console.log(enddate.toLocaleDateString());
console.log(renewdate.toLocaleDateString());
</script>