JavaScript 日期对象Date()
日期对象首先是一个对象,这个对象和之前接触过的那些对象,没什么其它不一样的地方,
只不过它能提供的功能和方法全是关于日期的,而且日期对象是系统提供好的,我们只需要把他的功能掌握清楚就ok了
一、Date对象
对象怎么建立的?对象是构造函数建立的
Date() 是系统给提供的一个已经写好的构造函数,通过一个 new Date() 就可以返回一个对象,这个对象就是一个日期对象
var date = new Date();
日期对象有很多属性和方法,下面我们学习它带的属性和方法,
官方文档: https://www.w3school.com.cn/jsref/jsref_obj_date.asp
Date()就两个属性
属性 | 描述 |
---|---|
constructor | 返回对创建此对象的 Date 函数的引用 |
prototype | 使您有能力向对象添加属性和方法 |
constructor属性是原型上的属性(是个对象就有这个属性)
prototype属性是构造函数的属性,官方文档把这俩放到一块不科学
Date构造函数制造出的对象能使的一些方法
方法 | 描述 |
---|---|
Date() | 返回当日的日期和时间 |
getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31) |
getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6) |
getMonth() | 从 Date 对象返回月份 (0 ~ 11) |
getFullYear() | 从 Date 对象以四位数字返回年份 |
getYear() | 请使用 getFullYear() 方法代替 |
二、获取时间
Date() 是构造函数自己空执行实现的一个效果,单独执行不new操作能返回日期的字符串
console.log(Date()); // Tue Nov 10 2020 14:50:37 GMT+0800 (中国标准时间)
getDate() 是Date构造函数制造出对象用的方法,返回一个月中的某一天 (1 ~ 31)
var date = new Date(); // 先建立一个日期对象 ,date代表此事此刻的日期对象,然后date对象调用getDate方法 console.log(date.getDate()); // 返回今天是一个月中的第几天 4
getDay() 返回今天是一周之中的第几天(0 ~ 6),从0开始周日返回0,周一返回1,周二返回2....
var date = new Date(); console.log(date.getDay()); // 返回2不是星期二的意思,是这周的第三天
返回的2不是星期二的意思,2是第三天的意思,从0开始查的(周日是0)
PS:
古希腊文明开始礼拜天(周日)是第一天sunday,sun是太阳太阳是第一天,monday是第二天拜月神,水神Tuesday,火神Wednesday…各种神
礼拜天没有7返回的是0,处理的时候输出1、2、3、4、5、6这些都是正常的,0代表礼拜天单独处理一下。
getMonth() 返回当前是第几月(0 ~ 11)也是从零开始的,一月返回0,操作的时候要加1
var date = new Date(); console.log(date.getMonth() + 1); // 8
getMonth() 12个月永远记住都少一个,
getDate() 一个月31天,阴差阳错还真是那么回事
getYear() 获取今年是多少年,请使用 getFullYear() 方法代替
var date = new Date(); console.log(date.getYear()); // 返回的120应该是2020 console.log(date.getFullYear()); // getFullYear()方法返回的是四位数年份2020
这里有一个小知识点
getFullYear() 是后来才出现的方法,javascript是1996年诞生的,那时候提供的方法是 date.getYear() ,
第一台计算机大概是1950年左右年出现的,1970年左右出现了基本的智能,什么叫智能?
原来的计算机只实现一个计算器的作用,叫calculator后来才逐渐演化成今天的computer。
产生智能的时候才1970年左右,那时候的人不会太想几十年以后的事,所以编辑时间的采取六位制,统一的国际时间六位制时间00.00.00(年.月.日),表示时间很简单 70.01.03 就足够了,
后来到到1999年12年31日往上进一位系统不够用了,因为只有六位 99.12.31 进一位怎么进 99.01.01,后两位都好说第一位99怎么进一位00.01.01
比如80年存到银行里钱,99-80等于19年然后00-80等于-80,欠银行80年利息(千年虫),
后来把年份延成了四位 date.getFullYear() 就是采取的这样表示方法。
时分秒
方法 | 描述 |
---|---|
getHours() | 返回 Date 对象的小时 (0 ~ 23) |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59) |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59) |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999) |
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数 |
日期时间都是基于date对象来的,时分秒也是基于 new Date() 构造的date对象
var date = new Date(); date.getHours(); // 返回小时(0 ~ 23) date.getMinutes(); // 返回分钟(0 ~ 59) date.getSeconds(); // 返回秒数(0 ~ 59)
getSeconds() 返回的是0 ~ 59秒数,再次执行的秒数是第一次执行的秒数
var date = new Date(); console.log( date.getSeconds() ); // 39 console.log( date.getSeconds() ); // 39 console.log( date.getSeconds() ); // 39
说明这一个date对象记录了他出生那一时刻的年月日时分秒,但凡访问那一刻的东西它永远都不会变,他不是实时的,他起到了一个时刻记录的作用
过几分钟再新建一个 var newDate = new Date() ,newDate记录了新建那一时刻的年月日时分秒
在控制台执行的间隔时间,会体现出秒数的变化
new Date().getSeconds()
getMilliseconds() 返回毫秒 ( 0 ~ 999 ),一秒等于1000毫秒
var date = new Date(); console.log(date.getMilliseconds());
四、时间戳
getTime() 是重点,返回1970年1月1日至今的毫秒数,getTime()是这一系列方法中最常用的最有用的
var date = new Date(); console.log(date.getTime());
什么是1970年1月1日?
公元2000年是人为定义了一个公元年管那个年份叫纪元,计算机纪元时间1970年1月1日,getTime()返回的是当前时刻,距计算机纪元时刻一共过了多少毫秒
getTime()能帮我们求时间差,比如我们通过程序执行的方式验证一段代码到底执行了多次时间
var firstTime = new Date().getTime(); // 执行前时间 for(var i = 0; i < 1000000; i++){ // for循环转1000000圈 } var listTime = new Date().getTime(); // 执行后时间 console.log(listTime - firstTime); // 程序执行的毫秒数
getTime()的方式通俗的讲就叫做时间戳,记录这个时刻的方式就管他叫做时间戳,
时间戳往往作为唯一标识来使用,比如ajax传递数据的时候,怎么保证这次传递的数据和下次传递的数据不引发缓存机制,这次和下次传的东西一样但是时间节点不一样,就盖一个时间戳就导致这两次东西肯定不一样了
四、设置时间
日期对象除了get的方法以外,还有set的方法,把时间里面的信息提取出来以外,可以手动的设置一个时间当闹钟使,
比如设置一个2020年8月4号某时某刻的时间,当程序运行到这个时间的时候,两个比对成功就可以触发某种东西
setDate() 设置date对象中的的某一天 (1 ~ 31)
var date = new Date(); console.log(date); // Tue Aug 04 2020 14:14:08 GMT+0800 (中国标准时间) date.setDate(19); // 设置19号 console.log(date); // Wed Aug 19 2020 14:14:08 GMT+0800 (中国标准时间)
改日期其它的信息也跟着变
set有什么用呢?
比如定时抢购有一个倒计时还有多长时间,倒计时快结束的时候,其实就是快接近设置的那个时间点的时候,
设置的时间点和程序运行的时间点吻合,这两个时间点存在重合,重合就会触发这个时间段该干的事了。
怎么判断这两个时间点吻合?
可以用toString()把时间都转化成字符串再比对,这样太麻烦了,
最好的方法就是getTime,当前时刻的getTime和设置好的时间的getTime两个一减误差小于1000毫秒,就相当于重合了
var date = new Date(); date.setMinutes(21); // 当前时间是20分,这里设置21分 setInterval(function (){ if(new Date().getTime() - date.getTime() > 1000){ // 现在时间戳减去设置时间戳大于1000毫秒 console.log('一直打印'); } },1000);
setTime() 是直接通过设置毫秒数来设置一个日期
var date = new Date(); date.setTime(12345678900000); console.log(date); // Wed Mar 22 2361 03:15:00 GMT+0800 (中国标准时间) // 这个设置可以通过getTime在set回去
五、toString()
toString() 把Date对象转换为字符串
var date = new Date(); console.log(date.toString()); // "Wed Mar 22 2361 03:15:00 GMT+0800 (中国标准时间)"
toTimeString() 把Date对象的时间部分转换为字符串
var date = new Date(); console.log(date.toTimeString()); // "16:38:42 GMT+0800 (中国标准时间)"
小练习
封装函数,打印当前是何年、何月、何日、何时、几分几秒