创建
new Date()
不带参数 —— 创建一个表示当前日期和时间的 Date 对象:
let now = new Date();
alert( now ); // 显示当前的日期/时间
new Date(milliseconds)
传入时间戳,来创建日期
new Date(datestring)
只有一个参数,并且是字符串,那么它会被自动解析。该算法与 Date.parse 所使用的算法相同:let date =newDate(“2017-01-26”);
new Date(year, month, date, hours, minutes, seconds, ms)
只有前两个参数是必须的
- year 必须是四位数:2013 是合法的,98 是不合法的。
- month 计数从 0(一月)开始,到 11(十二月)结束。
- date 是当月的具体某一天,如果缺失,则为默认值 1。
如果 hours/minutes/seconds/ms 缺失,则均为默认值 0。
new Date(2011, 0, 1, 0, 0, 0, 0); // 1 Jan 2011, 00:00:00
new Date(2011, 0, 1); // 同样,时分秒等均为默认值 0
访问日期组件
getFullYear():获取年份(4 位数)
getMonth():获取月份,从 0 到 11
getDate():获取当月的具体日期,从 1 到 31,这个方法名称可能看起来有些令人疑惑。
getHours(),getMinutes(),getSeconds(),getMilliseconds():获取相应的时间组件。
getDay():获取一周中的第几天,从 0(星期日)到 6(星期六)。第一天始终是星期日,在某些国家可能不是这样的习惯,但是这不能被改变。
getTime():返回日期的时间戳 —— 从 1970-1-1 00:00:00 UTC+0 开始到现在所经过的毫秒数。设置日期组件
- setMonth(month, [date])
- setDate(date)
- setHours(hour, [min], [sec], [ms])
- setMinutes(min, [sec], [ms])
- setSeconds(sec, [ms])
- setMilliseconds(ms)
- setTime(milliseconds):(使用自 1970-01-01 00:00:00 UTC+0 以来的毫秒数来设置整个日期)
除了 setTime() 都有 UTC 变体,例如:setUTCHours()。
自动校准(Autocorrection)
自动校准 是 Date 对象的一个非常方便的特性。我们可以设置超范围的数值,它会自动校准。
假设我们要在日期 “28 Feb 2016” 上加 2 天。结果可能是 “2 Mar” 或 “1 Mar”,因为存在闰年。但是我们不需要去考虑这些,只需要直接加 2 天,剩下的 Date 对象会帮我们处理:
let date = new Date(2016, 1, 28);
date.setDate(date.getDate() + 2);
alert( date ); // 1 Mar 2016
这个特性经常被用来获取给定时间段后的日期。例如,我们想获取“现在 70 秒后”的日期:
let date = new Date();
date.setSeconds(date.getSeconds() + 70);
alert( date ); // 显示正确的日期信息
//设置 0 甚至可以设置负值
let date = new Date(2016, 0, 2); // 2016 年 1 月 2 日
date.setDate(1); // 设置为当月的第一天
alert( date );
date.setDate(0); // 天数最小可以设置为 1,所以这里设置的是上一月的最后一天
alert( date ); // 31 Dec 2015
日期转化为数字,日期差值
当 Date 对象被转化为数字时,得到的是对应的时间戳,与使用 date.getTime() 的结果相同:
let date = new Date();
alert(+date); // 以毫秒为单位的数值,与使用 date.getTime() 的结果相同
日期可以相减,相减的结果是以毫秒为单位时间差:
let start = new Date(); // 开始测量时间
// do the job
for (let i = 0; i < 100000; i++) {
let doSomething = i * i * i;
}
let end = new Date(); // 结束测量时间
alert( `The loop took ${end - start} ms` );
Date.now()
它会返回当前的时间戳,相当于 new Date().getTime(),但它不会创建中间的 Date 对象。因此它更快
对一个字符串使用 Date.parse
Date.parse(str) 方法可以从一个字符串中读取日期。
字符串的格式应该为:YYYY-MM-DDTHH:mm:ss.sssZ,其中:
- YYYY-MM-DD —— 日期:年-月-日。
- 字符 “T” 是一个分隔符。
- HH:mm:ss.sss —— 时间:小时,分钟,秒,毫秒。
- 可选字符 ‘Z’ 为 +-hh:mm 格式的时区。单个字符 Z 代表 UTC+0 时区。
Date.parse(str) 调用会解析给定格式的字符串,并返回时间戳(自 1970-01-01 00:00:00 起所经过的毫秒数)。如果给定字符串的格式不正确,则返回 NaN。
let ms = Date.parse('2012-01-26T13:51:50.417-07:00');
alert(ms); // 1327611110417 (时间戳)