Date是JS中提供的内置对象,专门用于获取时间。
注意:我们中国所在的地区为东八区,也就是+8时区,不同的控制台对于时间的输出结果有可能不同,比如浏览器显示的就是正常时间,但如果是在VScode中,运行JS文件获取到的时间就比正常的时间少8小时,此时就要自行+8才能得到正确的时间。
目录
一、日期对象的创建
1、直接通过new Date()获取当前时间
var time=new Date()
console.log(time)
2、可以传入参数得到一个传入的参数的时间
var time=new Date("2019-03-03 13:11:11")
console.log(time)
3、可以传入一个通过new Date获取的时间,表示复制时间对象。
var time1=new Date("2022-05-20 13:14:15")
var time2=new Date(time1)
console.log(time1)
console.log(time2)
new Date()的传参情况
1、传一个参数
传一个参数表示毫秒数。
var time = new Date(2000);
console.log(time);
2、传两个参数
传递两个参数,第一个表示年,第二个表示月份。
var time =new Date(2019,00)
console.log(time) //2018-12-31T16:00:00.000Z,在时间+8之后,正好是2019-01-01的00时
注意:JS中月份从0开始,0表示1月,11表示12月。
3、传递三个数字,分别表示年、月、日
日的显示是正常的,从1-31。
var time =new Date(2019,1,20)
console.log(time)
4、六个参数,分别表示年、月、日、时、分、秒
var time =new Date(2020,4,20,19,20,30)
console.log(time)
5、可以直接传时间的字符串
var time=new Date("2022-05-20 10:10:10")
console.log(time)
var time2=new Date("2022/05/20 10:10:10")
console.log(time2)
//以上两种格式都可以
二、newDate传递时间字符串获取时间的坑
上面有说到可以传递两种格式的时间字符串:
var time=new Date("2022-05-20 10:10:10")
var time2=new Date("2022/05/20 10:10:10")
但是,第一种方法有个bug:
在只写年月日,不写时分秒的前提下:
1)、如果月份是个位数,且前缀为0的情况下,得到的时间会多出8小时;
2)、如果月份是两位数,但号数是个位数且前缀为0的话,得到的时间也会多出八小时。
var time=new Date("2022-02-12") // 得到的时间会多出八小时
var time2=new Date("2022-2-02") // 得到的时间 不 会多出八小时
var time3=new Date("2022-12-02") // 得到的时间会多出八小时
var time4=new Date("2022-12-2"); // 得到的时间 不 会多出八小时
三、时间对象的常用get方法
1、getFullYear()--获取当前年份
var date=new Date()
console.log(date.getFullYear())//2022
2、getMonth()--获取当前月份
var date=new Date()
console.log(date.getMonth()) //月份是从0开始的
3、getDate()--获取当前是几号
var date=new Date()
console.log(date.getDate())
4、getDay()--获取当前是周几
var date=new Date()
console.log(date.getDay())
注意:周日是0,周一至周六是1-6。
5、getHours--获取当前的小时
var date=new Date()
console.log(date.getHours())
6、getMinutes()--获取分钟
var date=new Date()
console.log(date.getMinutes())
7、getSeconds()--获取秒数
var date=new Date()
console.log(date.getSeconds())
8、getTime()--获取时间戳
时间戳也就是毫秒数,默认获取的时是:距离1970年1月1日 00时:00分:00秒的毫秒数。
var date=new Date()
console.log(date.getTime())
可以把获取到的时间戳,再传入new Date()中,返回的结果就是当前时间。
var date=new Date()
console.log(new Date(date.getTime()))
四、时间对象的常用set方法
上述的是所有get方法,除了getDay()之外,都有对应的set方法,作用是分别单独设置时间。
var date=new Date()
console.log(date)
date.setFullYear(2025)
date.setMonth(5)
date.setDate(20)
date.setHours(13)
date.setMinutes(20)
date.setSeconds(10)
console.log(date)
//setDay没有,因为具体的某一天有规定的星期几,不能随便更改,否则时间就乱套了
- 时间是可以做算术运算的,时间进行算数运算的原理是通过时间戳进行运算得出结果;
var date=new Date()
date.setMinutes(date.getMinutes+10)
console.log(date)
- 时间是可以自动进制的,比如1小时最多只有60分钟,但如果你写90分钟,会自动进制;
var date=new Date()
date.setMinutes(90)
console.log(date)
五、日期格式化
date.toLocaleString():会转为一个本地日期格式的【字符串】,虽然不能自动进制,也不能用日期的API,但是可以用字符串的API了。
看似很牛,其实比较垃圾:具有兼容性问题,老IE输出的和主流浏览器输出的东西不一样。
解决:自定义format函数
function timeFormat(date) {
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dte = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var day = date.getDay();
month < 10 && (month = "0" + month);
hours < 10 && (hours = "0" + hours);
minutes < 10 && (minutes = "0" + minutes);
seconds < 10 && (seconds = "0" + seconds);
var dayarr = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
return (
year +
"年" +
month +
"月" +
dte +
"日 " +
hours +
":" +
minutes +
":" +
seconds +
" " +
dayarr[day]
);
}