【Date】1、时间和时间戳

100 阅读4分钟

一、概念

1、GTM和UTC

GMT(格林尼治标准时间,Greenwich Mean Time)和 UTC(协调世界时,Coordinated Universal Time)都是以零时区(0°经线,通过英国格林尼治皇家天文台)为基准的时间标准,它们在表示时间上通常被视为等同,即两者都代表 UTC+0 时区。

特性GMT (格林尼治标准时间)UTC (协调世界时)
基础地球自转(天文观测)原子钟(国际原子时 + 闰秒)
精确性受地球自转影响,略有波动极其精确和稳定
是否闰秒有(用于与地球自转同步)
现代地位历史性/通俗用法国际标准时间
时间值与 UTC 在大多数日常场景下相同与 GMT 在大多数日常场景下相同

2、时间戳

时间戳表示UTC 时间 距离 1970年1月1日 08:00:00 UTC 有多少毫秒,时间戳本身是时区无关的,它代表一个绝对的时间点

Date.now() //1760688367597 现在的时间戳

二、时间戳的获取

1、Date.parse()

ECMA-262第5版定义了Date.parse()应该支持的日期格式:

❑ “月/日/年”,如"5/23/2019";

❑ “月名日,年”,如"May 23, 2019";

❑ “周几 月名 日 年 时:分:秒 时区”,如"Tue May 232019 00:00:00 GMT-0700";

❑ ISO 8601扩展格式“YYYY-MM-DDTHH:mm:ss.sssZ”,如2019-05-23T00:00:00(只适用于兼容ES5的实现)。

Date.parse("10/17/2025 11:35:00") //1760672100000
Date.parse('Oct 17, 2025') //1760630400000

2、Date.UTC()

传给Date.UTC()的参数是年、零起点月数(1月是0,2月是1,以此类推)、日(1-31)、时(0-23)、分、秒和毫秒。Date.UTC()获取的时间戳比Date.parse()获取的时间戳多8*60*60*1000毫秒,但是隐式调用没有这种问题。

Date.UTC(2025,9,17,11,35,0)  //1760700900000

3、Date.UTC()和Date.parse()计算方式的区别

Date.UTC()得到的时间会晚8小时。

Date.UTC(2025,9,17,11,35,0)-Date.parse("10/17/2025 11:35:00") === 8*60*60*1000  
//true
函数它认为你输入的时间是...实际对应的 UTC 时间
Date.UTC(...)UTC 11:35:00UTC 11:35:00
Date.parse(...)本地 11:35:00 (UTC+8)UTC 03:35:00
  • Date.UTC() 认为输入是 UTC,所以直接用 UTC 11:35:00 计算时间戳。
  • Date.parse() 认为输入是本地时间,所以它先转换为 UTC 03:35:00 再计算时间戳。

三、创建时间new Date()

1、不加参数时获取当前时间

new Date()
// Fri Oct 17 2025 15:20:44 GMT+0800 (中国标准时间)

2、加时间戳参数

new Date(1000)
//Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)

new Date()
//Fri Oct 17 2025 16:03:53 GMT+0800 (中国标准时间)
new Date(Date.now()+1000)
//Fri Oct 17 2025 16:03:54 GMT+0800 (中国标准时间)

new Date(Date.parse("10/17/2025 11:35:00"))
//Fri Oct 17 2025 11:35:00 GMT+0800 (中国标准时间)

new Date(Date.UTC(2025,9,17,11,35,0))
//Fri Oct 17 2025 19:35:00 GMT+0800 (中国标准时间) 


3、加Date.parse()参数类型的参数

会隐式调用Date.parse()。

new Date("10/17/2025 11:35:00")
//Fri Oct 17 2025 11:35:00 GMT+0800 (中国标准时间)

相当于

new Date(Date.parse("10/17/2025 11:35:00"))
//Fri Oct 17 2025 11:35:00 GMT+0800 (中国标准时间)

4、加Date.UTC()参数类型的参数

new Date(2025,9,17,11,35,0)
//Fri Oct 17 2025 11:35:00 GMT+0800 (中国标准时间)

会隐式调用Date.UTC()。隐式调用默认传入的是本地时间。显式调用的时候输入的时间比真实时间晚了8小时,new Date()后获得时间也比输入时间晚8小时。

*例:本地时间9点,utc时间就为1点,本来new Date(Date.UTC( ** )) 应该输入1点(会输出得到9点),但是实际输入了9点,所以得到的时间就变成了17点。 *

new Date(Date.UTC(2025,9,17,11,35,0))
//Fri Oct 17 2025 19:35:00 GMT+0800 (中国标准时间)