Go to comments

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 (中国标准时间)"


小练习

封装函数,打印当前是何年、何月、何日、何时、几分几秒



Leave a comment 0 Comments.

Leave a Reply

换一张