js的引用类型之Date类型

js的Date

UTC和GMT的区别

Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)经过的毫秒数来保存日期。

创建日期对象

1
2
//不传参,自动获得当前日期和时间
var now = new Date();

Date.parse()

支持的格式因地区而异,一般将地区设置为美国的游览器通常接受下列日期格式

  • “月/日/年”,如6/13/2004
  • “英文月名,日,年”,如January 12,2004
  • “英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2004 00:00:00 GMT-0700
  • ISO 8601扩展格式YYYY-MM-DDTHH:mm:ss.sssZ(例如 2004-05-25T00:00:00) 只有键入ECMAScript5的实现支持这种格式
1
2
3
4
var date1 = new Date(Date.parse("May 25,2004"));
var date2 = new Date("May 25,2004");//于上面等价,后台也会调用Date.parse()

console.log(Date.parse());//输出NaN

如果传参错误,不能表示一个日期,则返回NaN

在ECMAScript5中,如果使用标准的日期时间字符串格式规则,数字前又前置0,则会解析为UTC时间;没有前置0,则会解析为本地时间。

再看看前置0的问题

1
2
3
4
console.log(Date.parse("2016-7-12"));//1468252800000
console.log(Date.parse("7/12/2016"));//1468252800000
console.log(Date.parse("07/12/2016"));//1468252800000
console.log(Date.parse("2016-07-12"));//1468281600000

Date.UTC()

参数分别表示年份,基于0的月份(一月是0),月中的哪一天(1-31),小时数(0-23),分钟,秒以及毫秒数。年和月必须,其他参数若忽略,则统统假设为0

1
2
3
4
5
//GMT时间2000年1月1日午夜零时
var date1 = new Date(Date.UTC(2000,0));

//GMT时间2005年5月5日下午5:55:55
var date2 = new Date(Date.UTC(2005,4,5,17,55,55));

Date构造函数也会模仿Date.UTC(),但日期和时间都基于本地而非GMT来创建。

1
2
3
4
5
//本地时间2005年1月1日午夜零时
var date1 = new Date(2000,0);

//本地时间2005您5月5日下午5:55:55
var date2 = new Date(2005,4,5,17,55,55);

Date.now()

返回调用这个方法时的日期和时间的毫秒数

1
2
3
4
var now1 = Date.now();

//兼容方式
var now2 = +new Date();

toLocaleString() toString() valueOf()

Date类型重写了toLocaleString() toString() valueOf()

toLocaleString()根据游览器设置的地区返回日期和时间

toString()则返回带有市区信息的日期和时间

以上两个方法在不同的游览器中返回的日期和时间格式各不相同

valueOf不返回字符串,返回日期的毫秒表示

1
2
var date1 = new Date(2007,0,1);
console.log(date1.valueOf());//1167580800000

日期格式化方法

  • toDateString()以特定于实现的格式显示星期几、月、日和年
  • toTimeString()以特定于实现的格式显示时、分、秒和时区
  • toLocaleDateString以特定于地区的格式显示星期几、月、日和年
  • toLocaleTimeString()以特定于实现的格式显示时、分、秒
  • toUTCString()以特定于实现的格式完整的UTC日期
1
2
3
4
var date = Date.now();
console.log(date);

console.log(date.toDateString());

以上字符串格式方法的输出也是因游览器而异的

日期/时间组件方法

方法 说明
getTime()
setTime(毫秒)
getFullYear()
getUTCFullYear
setFullYear(年)
setUTCFullYear(年)
getMonth()
getUTCMonth()
setMonth(月)
setUTCMonth(月)
getDate
getUTCDate()
getDay()
getUTCDay()
getHours()
getUTCHours()
setHours(时)
setUTCHours(时)
getMinutes()
getUTCMinutes()
setMinutes(分)
setUTCMinutes(分)
getSeconds()
getUTCSeconds()
setSeconds(秒)
setUTCSeconds(秒)
getMilliseconds()
getUTCMilliseconds()
setMilliseconds(毫秒)
setUTCMilliseconds(毫秒)
getTimezoneOffset()