探索Date对象的秘密
上一篇文章介绍了关于new Date()中传递参数的各种形式。无论传递的参数是什么形式,new Date()的返回值都是一个对象,这个对象我们叫它为Date对象。
其实new Date()的作用是初始化Date对象,关于对象的解释这里不做详细的介绍,只要知道对象本身一般不能处理数据,只有对象中的方法才能针对具体业务中的具体数据做特别的处理。
下面的一张图说明了对象与对象下面的方法的关系。
理论
Date对象中的具体方法主要可以分为两大类:
- 一类是设置时间的方法(这里我暂且把它叫做set时间方法)
,
- 一类是获取时间的方法(这里我暂且把它叫做get时间方法)。
而这两类中的方法又分操作本地时间和UTC时间两种。
具体的方法有:
1.get本地时间方法
方法 | 作用 |
---|---|
getFullYear() | 通过Date对象获取四位数字表示的年份 |
getMonth() | 通过Date对象获取一年中第几个月份,取值是0-11 |
getDate() | 通过Date对象获取一个月中的某一天,取值是1-31 |
getDay() | 通过初始化的Date对象获取一周中的第几天,取值是0(周日)- 6(周六) |
getHours() | 通过初始化的Date对象获取小时数,取值是0-23 |
getMinutes() | 通过初始化的Date对象获取分钟数,取值是0-59 |
getSeconds() | 通过初始化的Date对象获取秒数,取值是0-59 |
getMilliseconds() | 通过初始化的Date对象获取毫秒数,取值是0-999 |
getTime() | 获取从1970年1月1日到通过初始化Date对象的毫秒数 |
2.get UTC时间方法
方法 | 作用 |
---|---|
getUTCFullYear() | 通过Date对象获取四位数字表示的年份(UTC时间) |
getUTCMonth() | 通过Date对象获取一年中第几个月份,取值是0-11(UTC时间) |
getUTCDate() | 通过Date对象获取一个月中的某一天,取值是1-31(UTC时间) |
getUTCDay() | 通过初始化的Date对象获取一周中的第几天,取值是0(周日)-6(周六) (UTC时间) |
getUTCHours() | 通过初始化的Date对象获取小时数,取值是0-23(UTC时间) |
getUTCMinutes() | 通过初始化的Date对象获取分钟数,取值是0-59(UTC时间) |
getUTCSeconds() | 通过初始化的Date对象获取秒数,取值是0-59(UTC时间) |
getUTCMilliseconds() | 通过初始化的Date对象获取毫秒数,取值是0-999(UTC时间) |
getUTCTime() | 获取从1970年1月1日到通过初始化Date对象的毫秒数(UTC时间) |
3.set本地时间方法
方法 | 作用 |
---|---|
setFullYear(yyyy) | 通过Date对象设置四位数字表示的年份yyyy |
setMonth(mm) | 通过Date对象设置一年中第几个月份mm |
setDate(dd) | 通过Date对象设置一个月中的某一天dd |
setHours(hh) | 通过初始化的Date对象设置小时数hh |
setMinutes(mm) | 通过初始化的Date对象设置分钟数mm |
setSeconds(ss) | 通过初始化的Date对象设置秒数ss |
setMilliseconds(ms) | 通过初始化的Date对象设置毫秒数ms |
setTime(ms) | 设置从1970年1月1日到通过初始化Date对象的毫秒数ms |
4.set UTC时间方法
方法 | 作用 |
---|---|
setUTCFullYear(yyyy) | 通过Date对象设置四位数字表示的年份yyyy(设置UTC时间) |
setUTCMonth(mm) | 通过Date对象设置一年中第几个月份mm(设置UTC时间) |
setUTCDate(dd) | 通过Date对象设置一个月中的某一天dd(设置UTC时间) |
setUTCHours(hh) | 通过初始化的Date对象设置小时数hh(设置UTC时间) |
setUTCMinutes(mm) | 通过初始化的Date对象设置分钟数mm(设置UTC时间) |
setUTCSeconds(ss) | 通过初始化的Date对象设置秒数ss(设置UTC时间) |
setUTCMilliseconds(ms) | 通过初始化的Date对象设置毫秒数ms(设置UTC时间) |
setUTCTime(ms) | 设置从1970年1月1日到通过初始化Date对象的毫秒数ms(设置UTC时间) |
附注
get、set UTC时间的方法和get、set本地方法是相似的,只不过其时间表示时的相对时区不一样而已,关于UTC时间的介绍会在下一篇文章列出
set时间的方法中的参数类型是整数类型。其中的参数没有大小的限制。比如:setMonth(mm)方法,可能你认为mm的大小会限制在0-11之间,其实不然,据验证,当其参数超过了11时,比如D.setMonth(12),该方法就会将D时间对象存储的年份进位1个单位,这有些像二进制、八进制、十进制中的逢二进一、逢八进一、逢十进一一样的道理。
set时间的方法中没有setDay()和setUTCDay()(可能是因为在现实中应用不大,也没有意义吧,毕竟一周就7天,要设置用setDate()或setUTCDate()代替就好啦)。另外,get时间的方法中没有getUTCTime(),因为getTime()方法是获取1970年1月1日到当前时间的毫秒数,它是一个相对值,所以就算有getUTCTime()方法,它也是和getTime()返回相同的值
注意Date对象中的方法是用于处理时间日期的,是相对人类定义的某种方式(比如UTC时间)来显示的时间,而非用于换算,这一点博主本人刚开始接触JS的时候就经常傻傻分不清楚的。
比如:3605h→通过getSeconds()的运算后→5s
其计算经过是: ss=3605(h)%3600(s/h)=5s,而非 ss=3600(s/h)*3605(h) 这种计算
实例
1.将当前时间按”yyyy/mm/dd hh:min:ss”的形式
var D = new Date(); //获取当前时间的时间对象
var yyyy = D.getFullYear(); //获取四位数字表示的年份
/*获取月份,
+1是因为getMonth方法返回的0(一月份)-11(十二月份)*/
var mm = D.getMonth()+1;
var dd = D.getDate(); //获取日期
var hh = D.getHours(); //获取小时数
var min = D.getMinutes(); //获取分钟数
var ss = D.getSeconds(); //获取秒
//分隔符
var sep1 = "/";
var sep2 = ":";
//用"0"补位不足两位数的时间
mm = (mm<10)?("0"+mm):mm;
dd = (dd<10)?("0"+dd):dd;
hh = (hh<10)?("0"+hh):hh;
min = (min<10)?("0"+min):min;
ss = (ss<10)?("0"+ss):ss;
var format = yyyy+sep1+mm+sep1+dd+" "+hh+sep2+min+sep2+ss;
//就在我这里此时的时间是:2017/06/03 11:37:01
2.45天之后的日期是多少
var D = new Date(); //获取今天的时间对象
var dd = D.getDate(); //获取今天是几号
var d45 = dd+45; //加45天
D.setDate(d45); //此时D对象已经被设置成了45天之后的时间对象
/**
此处再写上上例中获取时间的方法
即可得到相应格式的日期字符串
**/