Date对象是JS原生对象,既可以作为构造函数,也可以作为工具函数;
日期的零点是(0时区): 1970年1月1日 00:00:00
1. 基础知识
如果作为构造函数, 如果不传参数,返回当前时间的对象,是一个对象。
如果传参,返回指定时间(当前时区的时间)的对象。
var date = new Date();//Sat Oct 12 2019 23:51:42 GMT+0800 (中国标准时间) var date = new Date(2000,10,20); //Mon Nov 20 2000 00:00:00 GMT+0800 (中国标准时间)
如果作为工具函数,返回当前时间的字符串。不论有没有参数都是返回当前时间。
Date() === new Date().toString(); //true Date(2000,20,11) === new Date().toString() // true
2. 构造函数
1. 实例对象
通过构造函数生成的日期实例,使用时会自动调用toString()方法
2. 传参格式
1) 一个整数(正数/负数都可以),表示当前时区的时间距离1970.1.1的毫秒数
new Date(0); //Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间) // 返回的是距离当前时区的零点时间的毫秒数,即1970-1-1 08:00:00 new Date(0).toUTCString(); // 返回距离UTC时区0ms的时间 // "Thu, 01 Jan 1970 00:00:00 GMT" new Date(0).toISOString(); // 时间同UTC,但是格式是 ISO8601写法 // "1970-01-01T00:00:00.000Z" new Date(0).toJSON(); // 和ISOString()方法完全相同 // "1970-01-01T00:00:00.000Z" // 还可以是负数,代表1970-1-1之前的时间 new Date(-1000); // Thu Jan 01 1970 07:59:59 GMT+0800 (中国标准时间) new Date(-1000).toJSON(); // "1969-12-31T23:59:59.000Z"
2)一个日期字符串,只要是能被Date.parse()解析的都可以
new Date('2019-09-09'); // Mon Sep 09 2019 08:00:00 GMT+0800 (中国标准时间)
3) 多个整数(正数),分别代表年、月、日、时、分、秒、毫秒
其中年、月不能省略,其他都可以省略。即至少是两个参数,否则,用(1)的规则。
new Date(2000,0,1,0,0,0,0) //Sat Jan 01 2000 00:00:00 GMT+0800 (中国标准时间) new Date(10,0,1,0,0,0,0) // Sat Jan 01 1910 00:00:00 GMT+0800 (中国标准时间) new Date(0,0,1,0,0,0,0) // Mon Jan 01 1900 00:00:00 GMT+0805 (中国标准时间) new Date(-1,0,1,0,0,0,0) // Fri Jan 01 -0001 00:00:00 GMT+0805 (中国标准时间) new Date(100,0,1,0,0,0,0) //Fri Jan 01 0100 00:00:00 GMT+0805 (中国标准时间)
参考上面示例:
年: 可以是四位,代表年份;三位代表0000+,两位或者一位代表1900+,负数代表公元前
月:0-11分别代表 1-12月份。 超出范围,可以换算成第二年或者前一年的月份
日:1-31。超出换算。
时:0-23。
分: 0-59。
秒:0-59。
毫秒: 0-999。
3. 静态方法
全部返回的都是毫秒数。
1. Date.now()
现在距离1970的毫秒数,它的逆运算可以是new Date(Date.now())
2. Date.parse(str)
指定的时间字符串(字符串要符合YYYY-MM-DD HH:MM:SS的格式)对应的时间距离时间零点的毫秒数。
解析失败,返回NaN
UTC时间;逆运算是new Date(num).toJSON()
Date.parse('1970-01-02'); //86400000
3. Date.UTC(year,month[,date,hour,minute,second,miliseconds])
多个参数。参数用法和Date构造函数的多参数一致。
返回参数指定的时间距离时间零点的毫秒数
UTC时间;逆运算是new Date(num).toJSON()
Date.UTC(1970,0,2); //86400000 相当于1970-01-02
4. 实例方法
1. valueOf()
当日期对象参与‘-’运算时,自动调用valueOf()方法,返回对应的毫秒数
结果和getTime()相同。
2. to方法--日期对象调用,没有参数,返回字符串
1.toString()--当前时区时间
2.toUTCString()--UTC时间
3.toISOString()--ISO时间格式,UTC时间
4.toJSON()---同3
5.toDateString()--返回日期字符串
6.toLocaleDateString()--返回日期当地写法的字符串
7.toTimeString()--返回时间字符串
8.toLocaleTimeString()--返回时间当地写法的字符串
3. get方法--没有参数,返回整数,当前时区时间
1.getYear()---距离1900年的年数; // 119
2.getFullYear()--返回四位年位; //2019
3.getMonth()--返回0-11,代表1-12月; // 9; 代表的是10月份
4.getDate()--返回1-31,代表1-31号; // 12; 代表12号
5.getHours()--返回0-23; // 23;代表23点
6.getMinutes()--返回0-599
7.getSeconds()--返回0-59
8.getMilliseconds() -- 返回0-999
9.getDay()--返回0-6,代表星期天-星期六; // 1 星期二
10.getTime() --返回毫秒数
11.getTimezoneOffset()--返回时区差异的分钟数 //( 0时区-当前时区)*60
其中2-9提供了相应的UTC方法,返回UTC时间
如: getUTCDay()
4. set方法--传参,返回毫秒数
除了getDay(),getTimezoneOffset()没有对应的set方法,其他都有
setDate(date)
:设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。setYear(year)
: 设置距离1900年的年数。setFullYear(year [, month, date])
:设置四位年份。setHours(hour [, min, sec, ms])
:设置小时(0-23)。setMilliseconds()
:设置毫秒(0-999)。setMinutes(min [, sec, ms])
:设置分钟(0-59)。setMonth(month [, date])
:设置月份(0-11)。setSeconds(sec [, ms])
:设置秒(0-59)。setTime(milliseconds)
:设置毫秒时间戳
除了setTime()和setYear()都有对应的UTC的set方法。
5. 应用
计算相对时间
var date = new Date(); // 将时间设为6个小时后 date.setHours(date.getHours() + 6);