引用类型-Date

Date类型

ECMAscript中的Date类型是在早起java.util.Date基础上构建的。Date类型使用UCT(国际协调时间)1970年1月1日零时开始经过的毫秒数来保存日期。在这种数据储存格式的条件下,Date类型保存的日期能够精确到1970年1月1日零时前后的一亿年。

使用构造函数创建当前的时间日期

在不传递参数的情况下自动获取当前的日期和时间。

 

var now = new Date();
console.log(now);  //Sun Feb 19 2017 12:10:40 GMT+0800 (中国标准时间)

 

如果将构造函数当作普通函数使用。

 

var now1 = Date();
var now2 = Date(6/13/2007);
console.log(now1);
console.log(now2);
//不使用new创建的时间对象跟new没有什么不同,只不过是传递参数无效。

 

使用构造函数创建指定的时间日期

如果要创建指定的时间和日期,就需要传递从1970年1月1日到创建指定日期的毫秒数。这样让人头皮发麻。

参数可以接收unix时间戳,这个时间戳的单位为秒,所以要在乘以1000。

 

var old = new Date(3600 * 24 * 1000);  //一小时有3600秒,一天有24小时,在乘以1000,转换成毫秒
console.log(old);  //Fri Jan 02 1970 08:00:00 GMT+0800 (中国标准时间)
//这个表示的是1970年1月2日零时,但是为什么是08:00:00,因为中国与UTC时差为8,就是UTC+8

 

别忘了Date对象可以表示19701月1日0时前后一亿年,所以参数可以是负数。

var old = new Date(-3600 * 24 * 1000);
console.log(old);  //Wed Dec 31 1969 08:00:00 GMT+0800 (中国标准时间),前一日时区问题+8

 

所以ECMAScript提供了两个方法,Date.parse()和Date.UTC()。

十二个月的 英文表示:January、February、March、April、May、june、August、September、October、November、December

七个星期的英文表示:Monday、Tuseday、Wednesday、Thursday、Friday、Saturday、Sunday

 

 

Date.parse()方法接受一个表示日期的字符串参数,根据这个字符串返回日期的毫秒数。

 

var now = new Date(Date.parse('February 19, 2017'));
console.log(now);

 

var now = new Date(Date.parse('2/19/2017'));
console.log(now);

注意:如果Date.parse()方法传递的字符串不能表示日期,那么他会返回NaN。

var now = new Date(Data.parse('this is a string'));
console.log(now);  //Invalid Date(无效日期)

其实如果给构造函数传递表示日期的字符串,后台会自动调用Date.parse()方法。

var now = new Date('2/19/2017');
console.log(now);
//等价于  var now = new Date(Date.parse('2/19/2017'));

Date.UTC()方法,同样也返回的表示日期的毫秒数。只不过与Date.parse()方法的参数不同,也不是字符串。

Date.UTC()方法,接收的参数分别是年份,基于0的月份,月中的那一天,小时数(0-23),分,秒,毫秒。这些参数只有前两个参数是必须的,如果其它参数没有写,那么月中的那一天默认为1,其余均为0。

var now = new Date(Date.UTC(2017, 1, 19, 15, 43));
console.log(now);  //Sun Feb 19 2017 23:43:00 GMT+0800 因为时区问题会加8

Date.UTC()方法和Date.parse()方法一样,构造函数传递相应的方法会在后台自动调用,只不过日期和时间都是基于本地时区而非GMT来创建的。

日期的计算

如果日期转换为数值则为毫秒数,如果转换为字符串则为日期的字符串。日期的减法操作是毫秒数的相减,日期的相加是字符串的拼贴。

 

var old = new Date(2017, 2, 18);
var now = new Date(2017, 2, 19);
console.log(now - old);
console.log(now + old);

 

Date对象的静态方法即构造函数上的方法,之前的Date.parse()和Date.UTC()都属于此类方法

Date.now()这个方法是ECMAScript5中新增的方法,返回调用这个方法时日期和时间的毫秒数

var star = Date.now();
//调用一些函数
var stop = Date.now();
var result = stop - star;

如果浏览器不支持这个方法可以使用+操作符获取Date对象的时间戳

 

var star = +new Date();
//调用一些函数
var stop = +new Date();
var result = stop - star;
alert(result);

 

Date对象的valueOf()、toString()、toLocaleString()方法

toLocaleString()方法会按照浏览器设置地区相适应的格式返回日期和时间,时间格式会包含am、pm,但是不会包含时区信息(根据浏览器的不同格式也会不同)

var now = new Date();
var result = now.toLocaleString();
console.log(now);  //Sun Feb 19 2017 19:29:27 GMT+0800 (中国标准时间)
console.log(result);  //2017/2/19 下午7:29:27

toString()方法,通常返回带有时区信息的日期和时间,一般以军用时间来表示(0-23)。

var now = new Date();
var result = now.toString();
console.log(now);  //Sun Feb 19 2017 19:31:37 GMT+0800 (中国标准时间)
console.log(result);  //Sun Feb 19 2017 19:31:37 GMT+0800 (中国标准时间)
//这里返回的结果相同,但是前者是object、后者是string

valueOf()方法,返回时间日期的毫秒数,是unmber类型。

var now = new Date();
var result = now.valueOf();
console.log(now);  //Sun Feb 19 2017 19:35:08 GMT+0800 (中国标准时间)
console.log(result);  //1487504108647

Date对象有一个等价valoeOf()方法的方法。getTime()方法,同样返回表示日期的毫秒数。

var now = new Date();
var result = now.getTime();
console.log(result);

通过valueOf()方法和getTime()方法可以取代Date.now()方法,或者使用+运算符获取对象的时间戳。

var star = new Date();
//  执行一些函数
var stop = new Date();
var result = stop.valueOf() - star.valueOf();
var result = stop.getTime() - star.getTime();

日期格式化方法,这些方法都是将日期格式化为字符串的方法

toUTCString()方法,返回特定的UTC时间,比北京时间晚8小时。

toiSOString()方法,方法返回对应时间的ISO8601写法, UTC时区。

toJSON()方法,和toiSOSString()方法相同。

toDateString(),以特定个是现实星期几,月,日,年。

toTimeString(),以特定格式显示时,分,秒和时区。

toLocaleDateString(),以特定地区的格式显示星期几,月,日,年。

toLocaleTimeString(),以特定地区的格式显示时,分,秒,和时区。

get方法,用于获取时间信息

getTime()方法,获取距离1970年1月1日0时的毫秒数,等同于valueOf()方法。

getDate()方法,获取每个月的几号。

getDay()方法,获取星期,星期日为0。

getYear()方法,获取距离1900的年数。

getFullYear()方法,获取四位数年份(在获取年份的时候推荐用这个方法)

getMonth()方法,获取月份,0表示一月。

getHours()方法,获取小时(0-23)。

getMinutes()方法,获取分钟数。

getSeconds()方法,获取秒数。

getMilliseconds()方法,获取毫秒数。

getTimezoneOffset(),返回本地时间和UCT时间相差的分钟数。

 

 

 

posted @ 2017-02-19 20:02  398883362  阅读(74)  评论(0)    收藏  举报