Javascript提供了内置对象Date来表示日期和时间以及相应的方法。
创建
new Date()
我们可以使用new来创建一个日期/时间对象,如下:
let now = new Date();
alert( now ); // shows current date/time
new Date(milliseconds)
Javascript的Date对象在创建的时候默认保存从1970年1月1日到现在所经过的毫秒数,这也是它保存时间的原理。Date允许在创建的时候指定毫秒数,例如:// 0 means 01.01.1970 UTC+0
let Jan01_1970 = new Date(0);
alert( Jan01_1970 );
// now add 24 hours, get 02.01.1970 UTC+0
let Jan02_1970 = new Date(24 * 3600 * 1000);
alert( Jan02_1970 );
new Date(datestring)
我们也可以以字符串的形式指定date,例如:
let date = new Date("2017-01-26");
alert(date); // Thu Jan 26 2017 ...
new Date(year, month, date, hours, minutes, seconds, ms)
或者指定精确到秒的date,如下:
new Date(2011, 0, 1, 0, 0, 0, 0); // // 1 Jan 2011, 00:00:00
new Date(2011, 0, 1); // the same, hours etc are 0 by default
let date = new Date(2011, 0, 1, 2, 3, 4, 567);
alert( date ); // 1.01.2011, 02:03:04.567
获取Date时间的方法
Date提供了一些内置的方法来获取时间,分别为:
(1)getFullYear():获取年份,默认为4位数字,如:2018;
(2)getMonth():获取月份,值为0至11;
(3)getDate():获取一个月中的哪一天,值为1至31;
(4)getHours(), getMinutes(), getSeconds(), getMilliseconds():对应具体的时间;
(5)getDay():获取一个星期的哪一天(如周一),值为0至6;
(6)getTime():获取1970年1月1日起到现在的毫秒数;
(7)getTimezoneOffset():返回本地时区和UTC的差值,分钟为单位;
设置Date时间的方法
除了setter方法外,对应的就有getter方法,具体如下:
(1)setFullYear(year [, month, date])
(2)setMonth(month [, date])
(3)setDate(date)
(4)setHours(hour [, min, sec, ms])
(5)setMinutes(min [, sec, ms])
(6)setSeconds(sec [, ms])
(7)setMilliseconds(ms)
(8)setTime(milliseconds) (sets the whole date by milliseconds since 01.01.1970 UTC)
(2)setMonth(month [, date])
(3)setDate(date)
(4)setHours(hour [, min, sec, ms])
(5)setMinutes(min [, sec, ms])
(6)setSeconds(sec [, ms])
(7)setMilliseconds(ms)
(8)setTime(milliseconds) (sets the whole date by milliseconds since 01.01.1970 UTC)
下面是一个小例子:
let today = new Date();
today.setHours(0);
alert(today); // still today, but the hour is changed to 0
today.setHours(0, 0, 0, 0);
alert(today); // still today, now 00:00:00 sharp.
自动校正
Javascript提供的Date对象内部具有自动校正的功能,例如我们创建Date的时候指定1月32号,显然这是错误的,因为一个月最多只有31天,但是Date会自动计算到下个月,如下:
let date = new Date(2013, 0, 32); // 32 Jan 2013 ?!?
alert(date); // ...is 1st Feb 2013!
同样,我们在对日期进行加减的时候也不用考虑超出界限,这些工作Date都帮你做好了,你只需要直接加减操作就可以了,例如:
let date = new Date(2016, 1, 28);
date.setDate(date.getDate() + 2);
alert( date ); // 1 Mar 2016
let date = new Date();
date.setSeconds(date.getSeconds() + 70);
alert( date ); // shows the correct date
我们也可以在Date里设置0或者负数,例如:
date.setDate(1); // set day 1 of month
alert( date );
date.setDate(0); // min day is 1, so the last day of the previous month is assumed
alert( date ); // 31 Dec 2015
Date转换为Number
Date对象可以通过getTime()转换为number类型,因为getTime()返回的是一个毫秒数,或者使用"+",例如:
let date = new Date();
alert(+date); // the number of milliseconds, same as date.getTime()
Date date = new Date();
alert(date.getTime()); //return milliseconds count from 1 Jan 1970
Date.now()
Date.now()返回的是自1970年1月1日到现在的毫秒数,与getTime()相似,例如:
let start = Date.now(); // milliseconds count from 1 Jan 1970
// do the job
for (let i = 0; i < 100000; i++) {
let doSomething = i * i * i;
}
let end = Date.now(); // done
alert( `The loop took ${end - start} ms` ); // subtract numbers, not dates
Date.now()理论上比getTime()要快,因为前者不用创建对象Date.parse()解析时间格式的字符串
前面在创建指定时间的Date对象的时候,其内部就使用到Date.parse(),Date.parse()方法用来解析时间格式的字符串,时间字符串的格式为YYYY-MM-DDTHH:mm:ss.sssZ,其中T为定界符,可选的“Z”部分表示格式+-hh:mm的时区。一个字母Z表示UTC+0,下面是一个例子:
let ms = Date.parse('2018-02-07T13:51:50.417+08:00');
alert(ms); // 1327611110417 (timestamp)
其中Z部分+08:00表示东八区