js内置对象之Date
Date对象:封装一个时间点,提供操作时间的API。Date对象中封装的是从1970年1月1日0点至今的毫秒数。
1、创建Date对象(4种)
(1)创建Date对象同时获得当前系统时间,指的是客户端系统的当前时间
var now = new Date();
(2)创建日期对象,同时自定义时间,形如:Date("yyyy/MM/dd[ hh:mm:ss]")
var date = new Date("1994/04/06 03:23:55");
(3)创建日期对ixnag,同时自定义时间:由于计算机中日期MM从0开始计算,范围是0~11,使用时MM需要加1
var date = new Date(yyyy, MM, dd, hh, mm, ss);
(4)复制一个对象
var oldDate = new Date("1994/04/06");var newDate = new Date(oldDate.getTime());//参数可以是一个日期,也可以是一个毫秒数
2、日期API
日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds
2.1 每个分量都有一对get和set方法
getXXX()用于获取指定分量的值;setXXX()用于设置指定分量的值,可以自动调整时间进制。Day分量没有set方法,因为星期是根据日期换算出来的。
2.2 分量命名规律
年月日星期,后没有s,直接是英文;时分秒毫秒,后有s
2.3 取值范围
只有月中的日date分量是从1开始到31结束;其余都是从0开始,到进制最大量-1结束
getXXX() | setXXX() | 意义 | 范围 | 备注 |
date.getFullYear() | date.setFullYear() | 年 | ||
date.getMonth() | date.setMonth() | 月 | 0~11 | 使用时get方法 获得的值需要+1 |
date.getDate() | date.setDate() | 日 | 1~31 | |
date.getDay() | 无 | 星期 | 0~6 | |
date.getHours() | date.setHours() | 时 | 0~23 | |
date.getMinutes() | date.setMinutes() | 分 | 0~59 | |
date.getSeconds() | date.setSeconds() | 秒 | 0~59 | |
date.getMilliseconds() | date.setMilliseconds() | 毫秒 |
3、计算日期(2种)
1)求时间差:
日期-日期=毫秒差
日期-毫秒数=毫秒数
由于每个月的天数不一样,故此方法一般用于一个月之内的时间差计算。
2)对日期的任意分量做计算:3布
①取分量:使用对应的get方法
②计算
③设置分量:使用对应的set方法
简写:date.setXXX(date.getXXX()+n);
set方法是直接修改原日期。
4、日期转字符串
1) String(date):返回中国标准时间格式的字符串
2)date.toLocaleString():返回客户端当地时间格式,包含日期和时间。
3)date.toLocaleDateString():返回客户端当地时间格式,只包含日期部分
4)date.toLocaleTimeString():返回客户端当地时间格式,仅包含时间部分
不足:①方法名太长,不利于记忆;②兼容性问题,不同浏览器输出的效果不一样
5、练习
5.1 计算合同到期时间等
要求:①创建Date对象保存员工入职日期;②合同有效期为3年,计算合同到期时间;③合同到期前,需要提前一个月续签。如果提前一月的续签时间刚好是周末,则需要提前到上一个周五,计算续签时间;④要求在续签时间前一周,向员工发出续签提醒,计算提醒时间。
//入职时间var hireDate = new Date("2012/6/30");//赋值对象给endDatevar endDate = new Date(hireDate.getTime());endDate.setFullYear(endDate.getFullYear()+3);//var resumeDate = new Date(endDate.getTime());resumeDate.setMonth(resumeDate.getMonth()-1);if(resumeDate.getDay()==6){ resumeDate.setDate(resumeDate.getDate()-1);}if(resumeDate.getDay()==0){ resumeDate.setDate(resumeDate.getDate()-2);}var alertDate = new Date(resumeDate.getTime());alertDate.setDate(alertDate.getDate()-7);console.log("到期时间:"+endDate.toLocaleDateString());console.log("续签时间:"+resumeDate.toLocaleDateString());console.log("提醒时间:"+alertDate.toLocaleDateString());
5.2 计算明天开始,任意工作日之后的日期
var now = new Date();var days = 10;for(var i=0;i
5.3 自定义format方法,格式化日期
//返回形如“2017年3月2日 星期四 上午 11:12:31”function format (date){ var days = ["星期日","星期一","星期二","星期三","星期四","星期五","星期6"]; //获取date的年份 var year = date.getFullYear(); //获取date的月份,将月份格式化成两位数保存 var month = date.getMonth()<10 ? "0"+date.getMonth() : date.getMonth(); //获取date的日期,将日期格式化成两位数保存 var d = date.getDate()<10 ? "0"+date.getDate() : date.getDate(); //从days数组中获得date的星期对应位置的星期名 var day = days[date.getDay()]; //获得date的小时,保存为两位数 var hour = date.getHours(); var am = hour<12 ? "上午" : "下午"; hour = hour<12 ? hour : hour-12; var minute = date.getMinutes(); var second = date.getSeconds(); return year+"年"+month+"月"+d+"日 "+day+" "+am+" "+hour+":"+minute+":"+second;}console.log(format(new Date()));