Date对象

一、Date对象简介

Date 对象用于处理日期和时间。

1.Date对象的创建

Date 对象会自动把当前日期和时间保存为其初始值。注意当前日期和时间是指创建date对象那个时间点的时间。date对象创建后,它保存的时间并不会变化。

  let date = new Date() // Date 对象会自动把当前日期和时间保存为其初始值。
  console.log(date);
  setTimeout(() => {
  	console.log(new Date())
    console.log(date);
  }, 3000)

在这里插入图片描述

二、Date对象方法

1. get方法

Date对象的get方法主要用于获取Date对象的时间。
get方法中有get和getUTC两种,其中getUTC是根据世界时间获取,也就是所谓的格林威治时间。比中国的北京时间要慢8小时。
下方代码运行结果图:
在这里插入图片描述

(1)getMilliseconds()

getMilliseconds():返回 Date 对象的毫秒(0 ~ 999)。

  let date = new Date()
  console.log(Date());
  console.log(date.getMilliseconds() + '毫秒'); // 毫秒
  console.log(date.getUTCMilliseconds() + '毫秒'); // 毫秒

(2)getSeconds()

getSeconds():返回 Date 对象的秒数 (0 ~ 59)。

  let date = new Date()
  console.log(Date());
  console.log(date.getSeconds() + '秒'); // 秒
  console.log(date.getUTCSeconds() + '秒'); // 秒

(3)getMinutes()

getMinutes():返回 Date 对象的分钟 (0 ~ 59)。

  let date = new Date()
  console.log(Date());
  console.log(date.getMinutes() + '分'); // 分
  console.log(date.getUTCMinutes() + '分'); // 分

(4)getHours()

getHours():返回 Date 对象的小时 (0 ~ 23)。

  let date = new Date()
  console.log(Date());
  console.log(date.getHours() + '时'); // 时
  console.log(date.getUTCHours() + '时'); // 时

(5)getDate()

getDate():从 Date 对象返回一个月中的某一天 (1 ~ 31)。

  let date = new Date()
  console.log(Date());
  console.log(date.getDate() + '日'); // 日
  console.log(date.getUTCDate() + '日'); // 日

(6)getDay()

getDay():从 Date 对象返回一周中的某一天 (0 ~ 6)。

  let date = new Date()
  console.log(Date());
  console.log('周' + date.getDay()); // 周几
  console.log('周' + date.getUTCDay()); // 周几

(7)getMonth()

getMonth():从 Date 对象返回月份 (0 ~ 11)。

  let date = new Date()
  console.log(Date());
  console.log(date.getMonth() + '月'); // 月
  console.log(date.getUTCMonth() + '月'); // 月

(8)getFullYear()

getFullYear():从 Date 对象以四位数字返回年份。

  let date = new Date()
  console.log(Date());
  console.log(date.getFullYear() + '年'); // 年
  console.log(date.getUTCFullYear() + '年'); // 年

(9)getTime()

getTime():返回 1970 年 1 月 1 日至今的毫秒数。

  let date = new Date()
  console.log(Date());
  console.log(date.getTime()); // 返回 1970 年 1 月 1 日至今的毫秒数。

(10)getTimezoneOffset()

getTimezoneOffset():返回本地时间与格林威治标准时间 (GMT) 的分钟差。

  let date = new Date()
  console.log(Date());
  console.log(date.getTimezoneOffset()); // 返回本地时间与格林威治标准时间 (GMT) 的分钟差。

2. set方法

Date对象的方法主要用于设置Date对象的时间。
主要的使用场景是计算日期,比如要获取当前日期30天后的具体日期。如果我们手动加的话,因为每月的具体天数不同,比较麻烦,我们可以通过设置日期的方法解决,在本小结的结尾会具体举例。
下列方法具体执行结果:
在这里插入图片描述

(1)setMilliseconds()

setMilliseconds(number):设置 Date 对象中的毫秒 (0 ~ 999)。

  let date = new Date()
  console.log(date);
  date.setMilliseconds(1); // 毫秒
  console.log(date.getMilliseconds());

(2)setseconds()

setseconds(number):设置 Date 对象中的秒钟 (0 ~ 59)。

  let date = new Date()
  console.log(date);
  date.setSeconds(1); // 秒
  console.log('设置秒' + date);

(3)setMinutes()

setMinutes(number):设置 Date 对象中的分钟 (0 ~ 59)。

  let date = new Date()
  console.log(date);
  date.setMinutes(1); // 分
  console.log('设置分' + date);

(4)setHours()

setHours(number):设置 Date 对象中的小时 (0 ~ 23)。

  let date = new Date()
  console.log(date);
  date.setHours(1); // 时
  console.log('设置时' + date);

(5)setDate()

setDate(number):设置 Date 对象中月的某一天 (1 ~ 31)。

  let date = new Date()
  console.log(date);
  date.setDate(1); // 日
  console.log('设置日' + date);

(6)setMonth()

setMonth(number):设置 Date 对象中月份 (0 ~ 11)。

  let date = new Date()
  console.log(date);
  date.setMonth(1); // 月
  console.log('设置月' + date);

(7)setFullYear()

setFullYear(number):设置 Date 对象中的年份(四位数字)。

  let date = new Date()
  console.log(date);
  date.setFullYear(1998); // 年
  console.log('设置年' + date);

(8)使用场景

set方法常被用在计算当前时间点后n天的具体日期,具体实现如下:

  let d = new Date()
  console.log('当前日期:' + d.toLocaleString());
  d.setDate(d.getDate() + 30) // 获取30天之后的具体日期
  console.log('转换日期:' + d.toLocaleString());

在这里插入图片描述
在这里只拿‘天’举例,其他如‘分’、‘秒’、‘年’、‘月’等等道理相同。

3. to方法

Date对象的to方法是将Date对象转换为字符串的方法。
下面代码的执行结果图:
在这里插入图片描述

(1)toTimeString()

toTimeString():把 Date 对象的时间部分转换为字符串。

  let date = new Date()
  console.log(date.toTimeString()); // 把 Date 对象的时间部分转换为字符串。

(2)toDateString()

toDateString():把 Date 对象的日期部分转换为字符串。

  let date = new Date()
  console.log(date.toDateString()); // 把 Date 对象的日期部分转换为字符串。

(3)toString()

toString():把 Date 对象转换为字符串。

  let date = new Date()
  console.log(date.toString()); // 把 Date 对象转换为字符串。

(4)toLocaleTimeString()

toLocaleTimeString():根据本地时间格式,把 Date 对象的时间部分转换为字符串。

  let date = new Date()
  console.log(date.toLocaleTimeString()); // 根据本地时间格式,把 Date 对象的时间部分转换为字符串。

(5)toLocaleDateString()

toLocaleDateString():根据本地时间格式,把 Date 对象的日期部分转换为字符串

  console.log(date.toLocaleDateString()); // 根据本地时间格式,把 Date 对象的日期部分转换为字符串。

(6)toLocaleString()

toLocaleString():根据本地时间格式,把 Date 对象转换为字符串。

  let date = new Date()
  console.log(date.toLocaleString()); // 根据本地时间格式,把 Date 对象转换为字符串。

4. 其他方法

(1)valueOf()

valueOf():返回 Date 对象的原始值。(即:时间戳,和getTime()方法结果相同

  let date = new Date()
  console.log('valueOf:' + date.valueOf());
  console.log('getTime:' + date.getTime());

在这里插入图片描述

(2)parse()

parse(dateString):返回1970年1月1日午夜(该日期对象的UTC时间)到指定日期(字符串)的毫秒数。
dateString:一个符合 RFC2822 或 ISO 8601 日期格式的字符串。
例如:
RFC2822标准:Apr 06 2021 17:00:00 GMTApr 06 2021 17:00:00 GMT+0430(格林威治的子午线向东偏移4小时30分钟)如果没有指定时区,默认使用本地时区。
ISO 8601标准:2021-04-06 (仅日期)或 2021-04-06T17:00:00
(其他格式也许也支持,但结果可能与预期不符)。
**注意:**parse()方法是返回当前日期到1970年1月1日午夜的UTC时间。(UTC时间与GMT时间相同,都是格林威治标准时间)

  let time1 = Date.parse('Apr 06 2021 17:00:00 GMT+0800')
  console.log(time1);
  let time2 = Date.parse('2021-04-06T17:00:00')
  console.log(time2);
  let formatDate1 = new Date('Jan 01 1970 00:00:00 UTC') // 是到1970年1月1日午夜的UTC时间,所以要标明UTC或者GMT,不表明会默认为当前时区时间,也就是东八区
  let formatDate2 = new Date('Jan 01 1970 00:00:00')
  formatDate1.setMilliseconds(formatDate1.getMilliseconds() + time1) // 获取1970年1月1日午夜的UTC时间加上Date.parse()方法的毫秒值,看是否与我们格式化的时间相同
  console.log('UTC时间' + formatDate1.toLocaleString());
  formatDate2.setMilliseconds(formatDate2.getMilliseconds() + time1)
  console.log('当前时区时间' + formatDate2.toLocaleString()); // 不按照UTC时间初始化 1970-1-1 00:00:00 日期对象的话,会慢八小时,因为是默认按照东八区时间进行初始化

在这里插入图片描述
举个更明显的例子:

  let date1 = new Date('Jan 01 1970 00:00:00 UTC')
  let date2 = new Date('Jan 01 1970 00:00:00')
  let time1 = Date.parse('Jan 01 1970 00:00:00 UTC') // 按UTC时间进行转换,毫秒数为0
  let time2 = Date.parse('Jan 01 1970 00:00:00') // 按东八区时间进行转换,毫秒数为-28800000(负八小时)
  console.log(time1);// 0
  console.log(time2);// -28800000
  date1.setMilliseconds(date1.getMilliseconds() + time1)//date1和time1均为UTC时间,但是还是比我们初始化的时间快8小时,因为浏览器在输出时间时默认转换为东八区时间,也就是当前世界时间为:Jan 01 1970 00:00:00 UTC,但是东八区要加上八小时:Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
  console.log('UTC时间:' + date1.toString()); // UTC时间:Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
  date2.setMilliseconds(date2.getMilliseconds() + time1) // date2为东八区时间,time1为标准时间,与我们初始值相同。因为浏览器在输出时间时就是按照东八区时间输出
  console.log('非UTC时间:' + date2.toString()); // 非UTC时间:Thu Jan 01 1970 00:00:00 GMT+0800 (中国标准时间)
  date1.setMilliseconds(date1.getMilliseconds() + time2) // date1为UTC时间,time2按照东八区时间进行转换,与我们初始值相同。
  console.log('UTC时间:' + date1.toString()); // UTC时间:Thu Jan 01 1970 00:00:00 GMT+0800 (中国标准时间)
  date2.setMilliseconds(date2.getMilliseconds() + time2) // date2已经是东八区时间,time2又按照东八区时间进行转换,最后得到的比我们初始值慢8小时。因为date2按照东八区进行初始化,那么世界时间就-8小时,time2又按照东八区时间进行转换得到-28800000毫秒(负八小时),相加后就世界世界-16小时了。虽然最后浏览器按照东八区时间进行输出,也只是加8小时,最终结果还是慢8小时
  console.log('非UTC时间:' + date2.toString()); // 非UTC时间:Wed Dec 31 1969 16:00:00 GMT+0800 (中国标准时间)

在这里插入图片描述
时间转换确实很绕,我自己也有点晕。以上仅是个人理解。如果理解有偏差还请轻喷。其实如果确实绕不过来也没关系,我们在开发过程中一般都是获取两个时间点的差值(例如:2021-04-06到2021-03-06之间的毫秒值),只要保持时间格式一致(均为UTC或者均为东八区)不论如何,两个时间点parse()得到的差值是相同的。开发过程中也可以自测一下,避免时间错误。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值