时区
把地球分为24个时区,也就是一个区跨度时间为一个小时,一个周期整好是地球自转一周,也就是一天,完成白昼黑夜的轮回。规定将格林威治天文台所在地为起始点, 向东依次为12个正时区,表示比起始点依次多12个小时,向西依次12个负时区,表示比起始点依次少12个小时。比如咱们中国为东8区,比格林威治时间早8个小时。
Date.UTC(1970,0,2) // 86400000 = 24 hours
Date.parse('Jan 2 1970') // 57600000 = 16 hours
new Date('Jan 2 1970').getTime() // 57600000 = 16 hours
new Date('Jan 2 1970').valueOf() // 57600000 = 16 hours
// 第二天8点
new Date(86400000) // Fri Jan 02 1970 08:00:00 GMT+0800 (中国标准时间)
setUTCXxxx method
setUTCFullYear
dateObj.setUTCFullYear(yearValue[, monthValue[, dayValue]])
如果你不传 monthValue 和 dayValue,那么它会使用 getUTCMonth()
getUTCDate()
返回的值
setUTCHours
dateObj.setUTCHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
var theBigDay = new Date(); // theBigDay = Thu May 19 2016 16:10:33 GMT+0800 (中国标准时间)
theBigDay.setUTCHours(2); // theBigDay = Thu May 19 2016 10:10:33 GMT+0800 (中国标准时间)
如果你不传 minutesValue, secondsValue 和 msValue getUTCMinutes()
getUTCSeconds()
getUTCMilliseconds()
返回的值
由于是东8区,所以使用 setUTCXxxx 方法设置出来的时间都多8个小时
UTC时间转当地时间方法
注意: 由于浏览器之间的差异与不一致性,强烈不推荐使用Date构造函数来解析日期字符串 (或使用与其等价的Date.parse)。对 RFC 2822 格式的日期仅有约定俗称的支持。 对 ISO 8601 格式的支持中,仅有日期的串 (例如 “1970-01-01”) 会被处理为 UTC 而不是本地时间,与其他格式的串的处理不同。
new Date(new Date.UTC(2020, 0, 1))
时间格式表示法
RFC2822规范
ISO 8601规范:
2004-05-03T17:30:08+08:00 表示东八区的时间点
生成时间对象时,没带时区信息时,生成的是本地时区的时间点
new Date('1995-12-17T03:24:00') // Sun Dec 17 1995 03:24:00 GMT+0800 (中国标准时间)
// 结果同上一样
new Date('1995-12-17T03:24:00+0800') // Sun Dec 17 1995 03:24:00 GMT+0800 (中国标准时间)
// 由于末尾的Z表示是0时区,所以对应东八区时间多了8小时
new Date('1995-12-17T03:24:00Z') // Sun Dec 17 1995 11:24:00 GMT+0800 (中国标准时间)