【建议收藏】JS内置日期对象Date的使用指南

1,011 阅读6分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

已经有很多好用的时间处理插件,但是有的时候并不想引入其他插件,这个时候就可以直接使用JS的内置日期对象Date来处理时间。下面一起来看看吧!


前言

👉 时间处理插件:moment.js的实用操作 / dayjs官方文档

👉 不定期补充......

Date 对象方法速查表

放在最前面便于日常取用🤗

关键词:获取

方法描述
getFullYear()获取份(4 位数)
getMonth()获取份 (0 ~ 11)。
getDate()获取一个中的某一 (1 ~ 31)。
getHours()获取小数 (0 ~ 23)。
getMinutes()获取钟数 (0 ~ 59)。
getSeconds()获取数 (0 ~ 59)。
getMilliseconds()获取毫秒数(0 ~ 999)。
getDay()获取一中的某一 (0 ~ 6)。
getTime()获取与 1970 年 1 月 1 日之间的毫秒数。

🎨使用示例

let today = new Date();
today.getFullYear()

关键词:设置

方法描述
setFullYear(year, [month], [date])根据本地时间为一个日期对象设置年份(4 位数)
setMonth(month, [date])根据本地时间为一个日期对象设置月份。 (0 ~ 11)。
setDate(date)根据本地时间为一个日期对象设置日期。(1 ~ 31)。
setHours(hour, [min], [sec], [ms])根据本地时间为一个日期对象设置小时。 (0 ~ 23)。
setMinutes(min, [sec], [ms])根据本地时间为一个日期对象设置分钟。(0 ~ 59)。
setSeconds(sec, [ms])根据本地时间为一个日期对象设置秒数。(0 ~ 59)。
setMilliseconds(ms)根据本地时间为一个日期对象设置毫秒数。(0 ~ 999)。
setTime(milliseconds)根据本地时间为一个日期对象设置时间。(与 1970 年 1 月 1 日之间的毫秒数)

🎨使用示例

let today = new Date();
today.setFullYear(2022);  //结果是一个时间戳

💥:中括号[]的代表选填,如

dateObj.setFullYear(year, [month], [date])

  • year:指定年份的整数值,例如1995。
  • month:一个0到11之间的整数值,表示从一月到十二月。
  • date:一个1到31之间的整数值,表示月份中的第几天。如果你指定了 date 参数,就必须同时指定 month

如果没有指定 monthdate 参数,将会使用 getMonthgetDate 方法的返回值。



创建

无参数

不带参数表示当前日期和时间的Date对象

let now = new Date()

一个参数

参数可以是时间戳,也可以是字符串

//时间戳
let Jan02_1970 = new Date(24 * 3600 * 1000); 

//字符串
let date = new Date("2021-11-04");

传入的整数参数代表的是自 1970-01-01 00:00:00 以来经过的毫秒数,该整数被称为 时间戳


多个参数

语法:new Date(year, month, date, hours, minutes, seconds, ms)

使用当前时区中的给定组件创建日期。只有前两个参数是必须的。

  • year 必须是四位数:2013 是合法的,98 是不合法的。
  • month 计数从 0(一月)开始,到 11(十二月)结束。
  • date 是当月的具体某一天,如果缺失,则为默认值 1
  • 如果 hours/minutes/seconds/ms 缺失,则均为默认值 0

以下设置或者获取的年、月、日、时、分、秒,规则都是这样



实用方法

Date.parse()

📖描述:解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数。

📖格式要求:字符串的格式应该为:YYYY-MM-DDTHH:mm:ss.sssZ,其中:

  • YYYY-MM-DD —— 日期:年-月-日。
  • 字符 "T" 是一个分隔符。
  • HH:mm:ss.sss —— 时间:小时,分钟,秒,毫秒。
  • 可选字符 'Z'+-hh:mm 格式的时区。单个字符 Z 代表 UTC+0 时区。

简短形式也是可以的,比如 YYYY-MM-DDYYYY-MM,甚至可以是 YYYY


Date.now()

📖描述:返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间毫秒数


dateObj.toJSON()

📖描述: 返回一个 JSON 格式字符串

let date = new Date();      //Thu Nov 09 2017 18:54:04 GMT+0800 (中国标准时间)
let jsonDate = (date).toJSON();   //"2017-11-09T10:51:11.395Z"
let backToDate = new Date(jsonDate); //Thu Nov 09 2017 18:54:04 GMT+0800 (中国标准时间)

dateObj.valueOf()

📖描述:从1970年1月1日0时0分0秒到该日期的毫秒数。



实际应用

获取当前时间(单位/秒)

Date.parse(new Date()) / 1000

日期转为时间戳

let date = new Date('2021-11-04');

//方案一
let time =  Date.parse(date); //1635984000000

//方案二
let time =  date.valueOf();   //1635984000000

//方案三
let time =  date.getTime();   //1635984000000


获取之后的时间

🎨:获取距离指定时间两天之后的时间

🍇思路,获取日期直接+2,在通过设置日期的方法修改日期。(获取和设置的方法可看最后的速查表)

let date = new Date(2021, 02, 01);
date.setDate(date.getDate() + 2);

console.log(date)  //Wed Mar 03 2021 00:00:00 GMT+0800 (中国标准时间)

获取之前的时间

🎨:今天是4号,往前1天,则应该为3号

🍇思路:从当前 date 时间中减去给定的天数

function getDateAgo(date, days) {
  let dateCopy = new Date(date);
  dateCopy.setDate(date.getDate() - days);
  return dateCopy.getDate();
}

获取某月最后一天

🍒思路:使用下个月创建日期,将零作为天数(day)传递,因为日期会自动进行调整。因此,当我们传递 0 时,它的意思是“一个月的第一天的前一天”,换句话说:“上个月的最后一天”

function getLastDayOfMonth(year, month) {
  let date = new Date(year, month + 1, 0);
  return date.getDate();
}

获取当前月份天数

🍑思路:重点还是0的传递,获取本月最后一天即为当前月份的天数;

function mGetDate(month){
    var date = new Date();
    var year = date.getFullYear();
    if(!month){
        month = date.getMonth()+1;
    }
    var d = new Date(year, month, 0);
    return d.getDate();
}

获取指定时刻时间戳

 //把 Date 对象的日期部分转换为可读字符串
new Date().toDateString()

// " 23:59" 为指定获取时间戳的时间字符串,前面必须加一个空格
new Date().toDateString() + ' 23:59' 

//获取时间戳
new Date(new Date().toDateString() + ' 23:59') 

参考资料:

Date and time

MDN Date


🎨【点赞】【关注】不迷路,更多前端干货等你解锁

往期推荐

👉  你真的了解JavaScript的解构赋值吗?

👉 超详细的JS映射(Map)总结

👉 图解JavaScript的垃圾回收机制

👉JavaScript里this的绑定规则