JS中的Date对象

本文详细介绍了JavaScript中的Date对象,包括如何创建日期对象、解析时间字符串时的注意事项、常用的get方法(getFullYear、getMonth等)以及set方法。还提到了日期格式化的常见问题,并给出了解决方案。此外,文章揭示了在不同环境下Date对象表现的差异,例如VScode中可能需要手动调整时区。最后,讨论了日期格式化的局限性和自定义格式化函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Date是JS中提供的内置对象,专门用于获取时间

注意:我们中国所在的地区为东八区,也就是+8时区,不同的控制台对于时间的输出结果有可能不同,比如浏览器显示的就是正常时间,但如果是在VScode中,运行JS文件获取到的时间就比正常的时间少8小时,此时就要自行+8才能得到正确的时间。

目录

一、日期对象的创建

new Date()的传参情况

1、传一个参数

2、传两个参数

3、传递三个数字,分别表示年、月、日

 4、六个参数,分别表示年、月、日、时、分、秒

5、可以直接传时间的字符串

二、newDate传递时间字符串获取时间的坑

三、时间对象的常用get方法

1、getFullYear()--获取当前年份

2、getMonth()--获取当前月份

3、getDate()--获取当前是几号

4、getDay()--获取当前是周几

5、getHours--获取当前的小时

6、getMinutes()--获取分钟

7、getSeconds()--获取秒数

8、getTime()--获取时间戳

四、时间对象的常用set方法

五、日期格式化


一、日期对象的创建

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]
				);
			}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值