时间构造函数的使用
new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
13.1 时间名词解析
GMT - 格林尼治标准时间、格林威治平均时间
Greenwich Mean Time 由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。 视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。 为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。 平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时
(UTO)
,又叫格林尼治平时(GMT)。
UTC
- 协调世界时间Universal Time Coordinated 是国际无线电咨询委员会制定和推荐的,
UTC
相当于本初子午线(即经度0度)上的平均太阳时。
它是经过平均太阳时(以格林威治标准时间GMT)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,
计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC
比GMT来得更加精准。
其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC
与地球自转周期一致。
所以基本上UTC
的本质强调的是比GMT更为精确的世界时间标准.它其实是个更精确的GMT.
LT - 本地时间
LocalTime
所在时区的时间。UTC
或GMT与LT如下的换算关系:LT=UTC
+时区差 ;
东区是加相应的时区差,西区是减时区差。如北京是东八区,则北京时间=UTC
+8.
13.2 时间的换算
1.
UTC
时间 与 GMT时间
我们可以认为格林威治时间就是世界协调时间(GMT=UTC
),格林威治时间和UTC
时间均用秒数来计算的。2.
UTC
时间 与 本地时
UTC
+ 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
UTC
+ (+0800) = 本地(北京)时间 (1)
那么,UTC
= 本地时间(北京时间))- 0800 (2)
3.UTC
与 Unix时间戳在计算机中看到的
UTC
时间都是从(1970年01月01日0:00:00
)开始计算秒数的。所看到的UTC
时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。
13.3 时间对象的静态方法
-
Date.now()
: 方法返回自1970年1月1日00:00:00 UTC
到当前时间的毫秒数 ,类型为Number。-
有一个参数,该参数必须是一个时间戳;若没有则默认值为
Date.now()
,也就是当前时间目的:把时间戳转成时间对象来表示
var date = new Date(2005, 6, 12, 6, 30, 0 , 2333); console.log(date); 结果值:Date Sun Jul 01 2001 06:30:02 GMT+0800 (中国标准时间) 月份是0到11,所以6月返回值是Jul
-
-
Date.UTC(year,month[,date[,hrs[,min[,sec[,ms]]]]])
:方法接受的参数同日期构造函数接受最多参数时一样,返回从1970-1-1 00:00:00 UTC
到指定日期的的毫秒数(时间戳)。-
year
:1900 年后的某一年份。 -
month
:0 到 11 之间的一个整数,表示月份。 -
date
:1 到 31 之间的一个整数,表示某月当中的第几天。 -
hrs
:0 到 23 之间的一个整数,表示小时。 -
min
:0 到 59 之间的一个整数,表示分钟。 -
sec
:0 到 59 之间的一个整数,表示秒。 -
ms
:0 到 999 之间的一个整数,表示毫秒。
-
-
Date.parse(dateString)
: 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC
到该日期对象(该日期对象的UTC
时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN
。dateString
的形式可如下两种:ISO 8601
标准格式:Year: YYYY (eg 1997)
Year and month: YYYY-MM (eg 1997-07)
Complete date:YYYY-MM-DD (eg 1997-07-16)
- 日期形式 可以用 / , 空格 来分割
Complete date plus hours and minutes: YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
Complete date plus hours, minutes and seconds: YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
Complete date plus hours, minutes, seconds and a decimal fraction of asecond:YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
RFC2822(IETF)标准
格式:- “月/日/年”,如6/13/2004;
- “英文月名 日,年”,如January 12,2004;
- “英文星期几 英文月名 日 年 时:分:秒 时区”,如
Tue May 25 2004 00:00:00 GMT-0700
。
- 若parse没有参数,则输出
Invalid Date
,表示无效的时间 - T必须是大写,T后面的时间必须是双位数值,其中
1s = 1000ms
-
- 后面是时区
- 若
parse
不声明时间区,则将该参数作为当前时区的时间点,默认+08:00
(当前时区,冒号可省),在转成时间戳时会倒推8小时。
13.4 时间实例化对象的方法
dateObj.getTime()
:返回一个时间的格林威治时间数值,无参数。var date = new Date(2019, 8, 7, 8, 00, 0 , 2333); console.log(date.getTime());
dateObj.setTime(timeValue)
:以一个表示从1970-1-1 00:00:00 UTC
计时的毫秒数为来为Date
对象设置时间。- 目的:改变目标时间,破坏性方法
date.setTime(Date.UTC(2005, 6, 5));
dateObj.getFullYear()
:返回的值是绝对数。 对于1000到9999之间的日期。dateObj.setFullYear(yearValue[, monthValue[, dayValue]])
:根据传入的时间值来改变当前对象时间。
yearValue
:指定年份的整数值,例如1995。monthValue
:一个0到11之间的整数值,表示从一月到十二月。dayValue
:一个1到31之间的整数值,表示月份中的第几天。如果你指定了dayValue
参数,就必须同时指定monthValue
。
dateObj.getYear()
:返回指定的本地日期的年份。因为getYear
不返回千禧年[full years] (“year 2000 problem”),所以这个方法不再被使用,现在替换为getFullYear
。dateObj.setYear(yearValue)
:根据本地时间为一个日期对象设置年份。
dateObj.getMonth()
:返回一个0 到 11的整数值: 0 代表一月份,1 代表二月份, 2 代表三月份,依次类推。dateObj.setMonth(monthValue[, dayValue])
:根据本地时间为一个设置年份的日期对象设置月份。 返回基于1 January 1970 00:00:00 UTC
开始计算的毫秒数 。
monthValue
:介于 0 到 11 之间的整数(表示一月到十二月)。dayValue
:从 1 到 31 之间的整数,表示月份中的第几天。
dateObj.getDate()
:根据本地时间,返回一个指定的日期对象为一个月中的第几天。dateObj.setDate(dayValue)
: 根据本地时间来指定一个日期对象的天数。
dateObj.getDay()
:返回一个整数值: 0 代表星期日, 1 代表星期一,2 代表星期二, 依次类推。
dateObj.getHours()
:返回一个0 到 23之间的整数值。dateObj.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
:根据本地时间为一个日期对象设置小时数,返回从1970-01-01 00:00:00 UTC
到更新后的日期对象实例所表示时间的毫秒数。
dateObj.getMinutes()
:返回一个0 到 59的整数值,即获取目标时间的分钟。dateObj.setMinutes(minutesValue[, secondsValue[, msValue]])
:根据本地时间为一个日期对象设置分钟数。
dateObj.getSeconds()
:根据本地时间,返回一个指定的日期对象的秒数。dateObj.setSeconds(secondsValue[, msValue])
:根据本地时间设置一个日期对象的秒数。
dateObj.getMilliseconds()
:返回一个0 到 999的整数,获取本地时间的毫秒。dateObj.setMilliseconds(millisecondsValue)
:根据本地时间设置一个日期对象的豪秒数。
- 我们还可以使用如下的方法来根据
UTC
时间为基础来获取或设置时间:注意:中国时区比格林威治时间早8小时,所以在返回Hours时会减少8小时
dateObj.getUTCFullYear()
dateObj.setUTCFullYear(yearValue[, monthValue[, dayValue]])
dateObj.getUTCMonth()
dateObj.setUTCMonth(monthValue[, dayValue])
dateObj.getUTCDate()
dateObj.setUTCDate(dayValue)
dateObj.getUTCDay()
dateObj.getUTCHours()
dateObj.setUTCHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
dateObj.getUTCMinutes()
dateObj.setUTCMinutes(minutesValue[, secondsValue[, msValue]])
dateObj.getUTCSeconds()
dateObj.setUTCSeconds(secondsValue[, msValue])
dateObj.getUTCMilliseconds()
dateObj.setUTCMilliseconds(millisecondsValue)
dateObj.toString()
:返回一个字符串,表示该Date对象。dateObj.toLocaleString()
:根据当地语言规定返回代表着时间的字符串。dateObj.toDateString()
:以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。dateObj.toLocaleDateString()
:根据当地语言规定返回一个日期对象日期部分的字符串。dateObj.toTimeString()
:以美式英语和人类易读的形式返回一个日期对象时间部分的字符串。dateObj.toLocaleTimeString()
:根据当地语言规定返回一个日期对象时间部分的字符串。dateObj.toUTCString()
:把一个日期转换为一个字符串,使用UTC
时区。dateObj.toGMTString()
:把一个日期转换为一个字符串,使用UTC
时区。(已废除)dateObj.toISOString()
:返回一个ISO 8601
格式的字符串:YYYY-MM-DDTHH:mm:ss.sssZ
。时区总是UTC
(协调世界时),加一个后缀**“Z”**标识。
UTC
格林威治标准时间 与 GMT
格林尼治标准时间 的兼容性问题
var date = new Date;
var dateStr = (date.toUTCString() || date.toGMTString());
或
var dateStr = date[(date.toGMTString||date.toUTCString).name]()
console.log(dateStr)
(date.toGMTString||date.toUTCString)返回函数引用地址,属性.name返回该函数名
new date的作用:将时间戳转换成时间表示法,必须有一个参数(若没有则默认值为Date.now(),也就是当前时间)
var date = new Date(2005, 6, 12, 6, 30, 0 , 2333);
console.log(date); //以时间表示法的形式打印目标时间
console.log(Date.now()); //打印时间戳