【JS】Date 时间对象用法

本文详细介绍了JavaScript中的Date对象及其方法,包括如何创建Date实例、获取日期和时间的各个部分,以及如何计算两个时间点之间的时间差。此外,还探讨了Date.now()在性能优化中的应用。
摘要由CSDN通过智能技术生成

一、Date 对象

Date 是 js 的一个内置对象,该对象存储日期和时间,并提供了日期/时间的管理方法

  • new Date()在不传递参数的情况想是默认返回当前时间
var time = new Date();
console.log(time);
// 当前时间 Fri Mar 01 2019 13:11:23 GMT+0800 (中国标准时间)
  • new Date()在传入参数的时候,可以获取一个你传递进去的时间
var time = new Date('2019-03-03 13:11:11');
console.log(time);	
//Sun Mar 03 2019 13:11:11 GMT+0800 (中国标准时间)
  • new Date()传递的参数有多种情况
  1. 传递2个数字,第一个表示年,第二个表示月份
var time = new Date(2019, 00) // 月份从 0 开始计数,0 表示 1月,11 表示 12月
console.log(time) // Tue Jan 01 2019 00:00:00 GMT+0800 (中国标准时间)
  1. 传递3个数字,前两个不变,第三个表示该月份的第几天,从1到31
var time = new Date(2019, 00, 05) 
console.log(time) // Sat Jan 05 2019 00:00:00 GMT+0800 (中国标准时间)
  1. 传递4个数字,前三个不变,第四个表示当天几点,从 0 到 23
var time = new Date(2019, 00, 05, 22) 
console.log(time) // Sat Jan 05 2019 22:00:00 GMT+0800 (中国标准时间)
  1. 传递5 个数字,前四个不变,第五个表示的是该小时的多少分钟,从 0 到 59
var time = new Date(2019, 00, 05, 22, 33) 
console.log(time) // Sat Jan 05 2019 22:33:00 GMT+0800 (中国标准时
  1. 传递 6 个数字,前 五个不变,第六个表示该分钟的多少秒,从 0 到 59
var time = new Date(2019, 00, 05, 22, 33, 55) 
console.log(time) // Sat Jan 05 2019 22:33:55 GMT+0800 (中国标准时间)
  1. 传入字符串的形式
console.log(new Date('2019')) 
// Tue Jan 01 2019 08:00:00 GMT+0800 (中国标准时间)
console.log(new Date('2019-02')) 
// Fri Feb 01 2019 08:00:00 GMT+0800 (中国标准时间)
console.log(new Date('2019-02-03')) 
// Sun Feb 03 2019 08:00:00 GMT+0800 (中国标准时间)
console.log(new Date('2019-02-03 13:')) 
// Sun Feb 03 2019 13:00:00 GMT+0800 (中国标准时间)
console.log(new Date('2019-02-03 13:13:')) 
// Sun Feb 03 2019 13:13:00 GMT+0800 (中国标准时间)
console.log(new Date('2019-02-03 13:13:13')) 
// Sun Feb 03 2019 13:13:13 GMT+0800 (中国标准时间)

二、Data 方法(常用)

  • 比如我们得到的时间字符串是 Sun Feb 03 2019 13:13:13 GMT+0800 (中国标准时间)
  • 我指向得到这个日期中是那一年,我们就要靠截取字符串的形式得到
  • 但是现在 js 为我们提供了一系列的方法来得到里面的指定内容

2.1、获取时间(单)

标识方法描述
年份getFullYear()四位数年份
月份getMonth()月份(0–11),0 表示一年中的第一月。
天数getDate()一个月中的哪一日(1-31)
小时getHours()小时(0–23)
分钟getMinutes()分钟数(0–59)
秒钟getSeconds()秒钟数(0–59)
周几getDay()一周中的第几天(0-6),0 表示星期天
居今毫秒getTime()表示从 1970 年 1 月 1 日 0 时 0 分 0 秒距离该 Date 对象所代表时间的毫秒数
  • 示例:
var time = new Date('2019-02-13T08:00:22');
console.log(time.getFullYear());	// 2019
console.log(time.getMonth()); 		// 1
console.log(time.getDate()) 		// 13
console.log(time.getHours()) 		// 8
console.log(time.getMinutes()) 		// 0
console.log(time.getSeconds()) 		// 22
console.log(time.getDay()) 			// 3
console.log(time.getTime()) 		// 1552435222000

2.2、获取时间(全)

标识方法描述
年月日周toDateString()以美式英语和人类易读的表述形式返回一个 Date 对象日期部分的字符串。
时间toJSON()YYYY-MM-DDTHH:mm:ss.sssZ
年月日toLocaleDateString()该字符串格式因不同语言而不同
时间toLocaleString()该字符串格式因不同语言而不同
时分秒toLocaleTimeString()该字符串格式因不同语言而不同
时间toString()转字符串
时分秒toTimeString()转字符串
时间toUTCString()使用 UTC 时区
var time = new Date('2019-02-13T08:00:22');
console.log(time.toDateString());		// Wed Feb 13 2019
console.log(time.toJSON()); 			// 2019-02-13T00:00:22.000Z
console.log(time.toLocaleDateString()) 	// 2019/2/13
console.log(time.toLocaleString()) 		// 2019/2/13 上午8:00:22
console.log(time.toLocaleTimeString()) 	// 上午8:00:22
console.log(time.toString()) 			// Wed Feb 13 2019 08:00:22 GMT+0800 (中国标准时间)
console.log(time.toTimeString()) 		// 08:00:22 GMT+0800 (中国标准时间)
console.log(time.toUTCString()) 		// Wed, 13 Feb 2019 00:00:22 GMT

三、时间差

  • 是指获取两个时间点之间相差的时间
  • 在 js 中是不能用时间直接做 减法 的
  • 我们需要一些特殊的操作
  • 在编程的世界里面,有一个特殊的时间,是 1970年01月01日00时00分00秒
  • 这个时间我们叫做 格林威治时间
  • 所有的编程世界里面,这个时间都是一样的,而且 格林威治时间 的数字是 0
  • 格林威治时间 开始,每经过1毫秒,数字就会 + 1
  • 所以我们可以获取到任意一个时间节点到 格林威治时间 的毫秒数
  • 然后在用两个毫秒数相减,就能得到两个时间点之间相差的毫秒数
  • 我们在通过这个毫秒数得到准确的时间

3.1、计算时间差

  • 例如:我们现在计算一下 2019-01-01 00:00:002019-01-03 04:55:34 的时间差
  1. 先获取两个时间点到格林威治时间的毫秒数
var time1 = new Date('2019-01-01 00:00:00');
var time2 = new Date('2019-01-03 04:55:34');
time1 = time1.getTime();
time2 = time2.getTime();
console.log(time1);	// 1546272000000
console.log(time2);	// 1546462534000
  1. 两个时间相减,得到两个时间点之间相差的毫秒数
var differenceTime = time2 - time1;
console.log(differenceTime);	//190534000
  1. 把我们计算的毫秒数换算成时间
  • 先计算出有多少天
  • 以一天是1000 * 60 * 60 *24毫秒
  • 用总的毫秒数除以一天的毫秒数,就能得到多少天了
// 计算整的天数
var day = differenceTime /(1000*60*60*24)	;	//2.20525462962963
day = Math.floor(day);	//2
//因为得到的是有小数的天数,我们向下取整,得到有多少个整的天数
  • 使用differenceTime减去两天所包含的毫秒数,剩下的就是不够一天的毫秒数
  • 用不够一天的毫秒数计算出有多少个小时
  • 因为一个小时是24*60*60*1000毫秒
  • 用不够一天的毫秒数除以一小时的毫秒数,就能得到多少小时了
// 计算整的小时数
var afterHours = differenceTime-(100 * 60 * 60 * 24 * day);
var hours = afterHours / (60 * 60 *1000);
huors = Math.floor(huors);	//4
//和刚才一样的道理,我们需要向下取整
  • 同理,使用afterHours-4个小时包含的毫秒数,剩下的就是不足一个小时的毫秒数
  • 用不够一个小时的毫秒数计算出有多少分钟
  • 因为一分钟是60 * 1000毫秒
  • 用不够一个小时的毫秒数除以一分钟的毫秒数就能得到多少分钟了
// 计算整分钟数
var afterMinutes = afterHours - (1000 * 60 * 60 * huors);
var minutes = afterMinutes / (1000 * 60);
minutes = Math.floor(minutes); // 55
  • 和之前一样的道理计算出秒
// 计算整秒数
var afterSeconds = afterMinutes - (1000 * 60 * minutes);
var seconds = afterSeconds / 1000;
seconds = Math.floor(seconds); // 34
  • 最后,同理减去整秒的数,剩下的就是毫秒数
// 计算毫秒数
var milliSeconds = afterSeconds - (1000 * seconds) // 0
  • 最后我们把结果输出一下就可以了
var time1 = new Date('2019-01-01 00:00:00');
var time2 = new Date('2019-01-03 04:55:34');
time1 = time1.getTime();	// 1546272000000
time2 = time2.getTime();	// 1546462534000
var differenceTime = time2 - time1;	//190534000

// 计算整的天数
var day = differenceTime /(1000*60*60*24)	;	//2.20525462962963
day = Math.floor(day);	//2
//因为得到的是有小数的天数,我们向下取整,得到有多少个整的天数

// 计算整的小时数
var afterHours = differenceTime-(100 * 60 * 60 * 24 * day);
var hours = afterHours / (60 * 60 *1000);
huors = Math.floor(huors);	//4
//和刚才一样的道理,我们需要向下取整

// 计算整分钟数
var afterMinutes = afterHours - (1000 * 60 * 60 * huors);
var minutes = afterMinutes / (1000 * 60);
minutes = Math.floor(minutes); // 55

// 计算毫秒数
var milliSeconds = afterSeconds - (1000 * seconds) // 0

document.write('2019-01-01 00:00:00 和 2019-01-03 04:55:34 之间相差')
document.write(day + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒' + milliSeconds + '毫秒')

3.2、获取时间差

  • Date.now() :返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数
  • 它相当于 new Date().getTime(),但它不会创建中间的 Date 对象。
  • 因此它更快,而且不会对垃圾处理造成额外的压力。
// 从格兰威特时间到至今(循环开始前)的时间戳
let start = Date.now();
// 调用一个耗时间的循环
for (let i = 0; i < 100000; i++) {
  let doSomething = i * i * i;
}
// 从格兰威特时间到至今(循环结束后)的时间戳
let end = Date.now()

// 以毫秒计的运行时长
let elapsed = end - start;
  • 使用内建的创建方法
// 获取当前(循环开始前)的时间
let start = new Date();
// 调用一个耗时间的循环
for (let i = 0; i < 100000; i++) {
  let doSomething = i * i * i;
}
// 获取当前(循环结束后)的时间
let end = new Date()

// 以毫秒计的运行时长
let elapsed = end.getTime() - start.getTime();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值