JavaScript日期时间基础:UTC、闰年与格式详解
本文介绍JavaScript中Date对象相关的基础知识,涵盖格林尼治标准时间(GMT)与世界协调时间(UTC)的区别,详细解析闰年与平年的计算规则及月份天数逻辑,并说明ECMAScript定义的ISO8601扩展日期时间字符串格式及其注意事项。
前面的话
标准时间:GMT与UTC的区别
在深入探讨Date对象之前,有必要先掌握日期和时间的相关基础概念,例如闰年判定和UTC标准。理解这些背景知识有助于更准确地使用JavaScript中的Date对象。本文将系统介绍JavaScript中关于日期和时间的基础内容。
通常所说的标准时间主要指GMT(格林尼治标准时间)和UTC(世界协调时间)。早期标准是GMT,目前国际通用标准已转为UTC。
格林尼治标准时间(GMT)
格林尼治标准时间(GMT)源自伦敦郊区的皇家格林尼治天文台,其定义基于穿过该地的本初子午线。
理论上,格林尼治标准时间的正午定义为太阳横穿格林尼治子午线(即在格林尼治上空达到最高点)的时刻。但由于地球在椭圆轨道上的运动速度不均匀,这一时刻与实际太阳时可能存在高达16分钟的偏差。
地球自转存在不规则性且正在缓慢减速,因此格林尼治时间已不再作为官方标准时间使用。目前采用的标准时间由世界协调时间(UTC)提供。
世界协调时间(UTC)
世界协调时间(UTC),又称世界统一时间、世界标准时间或国际协调时间,全称为Coordinated Universal Time。这是一种以原子时秒长为基础,并在时刻上尽可能接近世界时的时间计量系统。
该时间系统广泛应用于互联网和万维网标准中。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾以及西澳大利亚州等地的时间与UTC的时差均为+8,即UTC+8。
在军事通信中,协调世界时区使用字母“Z”表示。由于“Z”在无线电联络中代称为“Zulu”,因此协调世界时也被称为“Zulu time”。
日期时间字符串格式规范
日期时间字符串格式
ECMAScript规范定义了一种基于简化版ISO8601扩展格式的日期时间字符串交换格式。
完整的日期时间格式表示为:YYYY-MM-DDTHH:mm:ss.sssZ。
[注意]在完整格式中,前置的0不可省略,否则会导致解析错误。
YYYY 公历中年的十进制数字,如果这个参数值在0-99之间,则向它加上1900
- 在字符串中直接以“-”(破折号)出现两次
MM 一年中的月份,从01(一月)到12(十二月)
DD 月份中的日期,从01到31
T 在字符串中直接以“T”出现,用来表明时间元素的开始
HH 用两个十进制数字表示的,自午夜0点以来的小时数
: 在字符串中直接以“:”(冒号)出现两次
mm 是用两个十进制数字表示的,自小时开始以来的分钟数
ss 是用两个十进制数字表示的,自分开始以来的秒数
. 在字符串中直接以“.”(点)出现
sss 是用三个十进制数字表示的,自秒开始以来的毫秒数
Z 是时区偏移量,由(“Z”(指UTC)或“+”或“-”)和后面跟着的时间表达式hh:mm组成
仅表示日期的格式包括:YYYY、YYYY-MM 或 YYYY-MM-DD。
[注意]所有数字必须采用10进制表示。若缺少MM或DD字段,默认值为“01”;若缺少mm或ss字段,默认值为“00”;若缺少sss字段,默认值为“000”;若缺少时区偏移量,默认使用“Z”。
闰年与平年的判定规则
闰年判定
年份分为闰年和平年。平年包含365天,闰年包含366天,闰年的2月比平年多出一天。
闰年的定义规则为:年份可被4整除,且(不可被100整除 或 可被400整除)。
记忆口诀为:四年一闰,百年不闰,四百年再闰。
function IsLeapYear(year){
if(typeof year == 'number'){
if((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0){
return 'leap year'
}else{
return 'common year'
}
}
return 'please input number'
}
console.log(IsLeapYear(4));//'leap year'
console.log(IsLeapYear(400));//'leap year'
console.log(IsLeapYear(2000));//'leap year'
console.log(IsLeapYear(1900));//'common year'
月日与星期的JavaScript表示
月日处理
一年有12个月,其中4、6、9、11月每月30天;若是闰年,2月有29天,否则2月有28天;1、3、5、7、8、10、12月每月31天。
在JavaScript中,月份从0开始计数,因此1月至12月分别对应0至11;而日期从1开始计数,1代表当月第1天,依此类推。
if(month == 2){
//如果是闰年
if((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0){
days = 29;
//如果是平年
}else{
days = 28;
}
//如果是第4、6、9、11月
}else if(month == 4 || month == 6 ||month == 9 ||month == 11){
days = 30;
}else{
days = 31;
}
在JavaScript中,月份的缩写形式常用于日期字符串的表示。
一月 Jan January
二月 Feb February
三月 Mar March
四月 Apr April
五月 May May
六月 Jun June
七月 Jul July
八月 Aug August
九月 Sep September
十月 Oct October
十一月 Nov November
十二月 Dec December
星期表示
星期从星期日(0)开始,至星期六(6)结束,分别用数字0-6表示。
在JavaScript中,各星期的缩写形式常用于日期字符串的表示。
星期日 sunday Sun
星期一 monday Mon
星期二 Tuesday Tue
星期三 Wednesday Wed
星期四 Thursday Thu
星期五 Fridday Fri
星期六 Saturday Sar
毫秒数与时分秒的转换
时分秒转换
1天 = 24小时 = 24*60(1440)分 = 24*60*60(86400)秒 = 86,400,000毫秒
1分= 60秒
1小时 = 3600秒
1天 = 86400秒
Date对象返回的是毫秒数,通常需要将其换算为时、分、秒的形式以便阅读和处理。
date = 100000s
day(天) = Math.floor(100000/86400) = 1
hour(小时) = Math.floor((100000%86400)/3600) = 3
minute(分) = Math.floor((100000%3600)/60) = 46
second(秒) = Math.floor(100000%60)=40
console.log(100000 === 1*86400+ 3*3600+ 46*60+40);//true
以上关于JavaScript日期和时间基础知识的介绍到此结束,希望能为读者提供参考,并欢迎大家继续支持本站。
ES6模块化中js文件怎么用import和export交互
2026-11-05 17:00:48
JS读取本地文件时报错或无响应的常见原因
2026-11-05 16:32:31
let、const与var的区别:JavaScript变量声明最佳实践
2026-11-05 14:16:38
JS中直接定义静态二维数组的字面量写法
2026-11-05 14:16:08
JS 怎么查找字符串中所有匹配项的位置
2026-11-05 14:15:53
