Go to comments

JavaScript 日期对象Date()

日期对象首先是一个对象,这个对象和之前接触过的那些对象,没什么其它不一样的地方,

只不过它能提供的功能和方法全是关于日期的,而且日期对象是系统提供好的,我们只需要把他的功能掌握清楚就ok了


一、Date对象

Date() 是构造函数,

它自己空执行实现的一个效果,单独执行不 new 操作能返回日期的字符串

console.log(Date()); // Tue Nov 10 2020 14:50:37 GMT+0800 (中国标准时间)


Date() 就两个属性

属性描述
constructor返回对创建此对象的 Date 函数的引用
prototype使您有能力向对象添加属性和方法

constructor 属性是原型上的属性(是个对象就有这个属性)

prototype 属性是构造函数的属性,官方文档把这俩放到一块不科学


对象怎么建立的?

对象是构造函数建立的,

Date() 是系统给提供的一个已经写好的构造函数,


通过 new Date()  就可以返回一个对象,这个对象就是一个日期对象

var date = new Date();


日期对象有很多属性和方法,下面我们学习它带的属性和方法,

官方文档: https://www.w3school.com.cn/jsref/jsref_obj_date.asp


二、获取时间

Date 构造函数制造出的对象能使的一些方法

方法描述
Date()返回当日的日期和时间
getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)
getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)
getMonth()从 Date 对象返回月份 (0 ~ 11)
getFullYear()从 Date 对象以四位数字返回年份
getYear()请使用 getFullYear() 方法代替


getDate() 

构造函数 Date 制造出对象用的方法,返回一个月中的某一天 (1 ~ 31)

1. 先建立一个日期对象 date,该对象代表此事此刻的日期对象

2. 然后 date 对象调用 getDate 方法

var date = new Date(); // 先建立一个日期对象date

console.log(date.getDate()); // 返回今天是一个月中的第几天 4


getDay() 

返回今天是一周之中的第几天(0 ~ 6),

从 0 开始,

周日返回 0,

周一返回 1,

周二返回 2....

返回的 2 不是星期二的意思,2 是第三天的意思,从 0 开始查的(周日是0)

var date = new Date();

console.log(date.getDay()); // 返回2不是星期二的意思,是这周的第三天


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


getDate()

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() ,new Date 记录了新建那一时刻的年月日时分秒

在控制台执行的间隔时间,会体现出秒数的变化

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,

1. 当前时刻的 getTime 和设置好的时间的 getTime,

2. 两个一减误差小于 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

换一张