Date类型
ECMAScript中的Date类型是在早期Java中java.util.Date类基础上构建的。为此,Date类型使用UTC (Coordinated Universal Time,国际协调时间[又称世界统一时间]) 1970年1月1日午夜(零时)开始经过的毫秒来保存日期。
ECMAScript提供了两个方法,Date.parse()和Date.UTC()。Date.parse()默认是京8区,Date.UTC()默认没有时区。Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回 1970/1/1 午夜距离该日期时间的毫秒数。ECMA-262没有定义Date.parse()应该支持哪种日期格式,因此方法的行为因实现而异,因地区而异。默认通常接收的日期格式如下:
- ‘月/日/年’,如6/13/2011;
- ‘英文月名 日, 年’,如 May 25, 2004;
- ‘英文星期几 英文月名 日 年 时:分:秒 时区’,如 Tue May 25 2004 00:00:00 GMT-070
<script type="text/javascript">
var date1 = Date.parse('6/13/2017 0:0:1');//相当于Mon Jun 13 2017 00:00:01 GMT+0800
console.log(date1);//1497283201000
var date2 = Date.parse('Jun 13,2017 00:00:02');
console.log(date2);//1497283202000
var date3 = Date.parse('Mon Jun 13 2017 00:00:00 GMT+0800');
console.log(date3);//1497283200000
</script>
日期后面可以跟时间
Date.UTC()方法同样也返回表示日期的毫秒数,但它与Date.parse()在构建值时使用不同的信息。(年份,基于0的月份[0表示1月,1表示2月],月中的哪一天[1-31],小时数[0-23],分钟,秒以及毫秒)。只有前两个参数是必须的。如果没有提供月数,则天数为1;如果省略其他参数,则统统为0。
<script type="text/javascript">
var date1 = Date.UTC(2017,5,13,0,0,1,10);//年,月,日,时,分,秒,毫秒
console.log(date1);//1497312001010,也是返回1970/1/1 午夜距离该日期时间的毫秒数
</script>
日期方法
与其他类型一样,Date类型也重写了toLocaleString()、toString()和valueOf()方法。
<script type="text/javascript">
var date1 = new Date(Date.UTC(2017,5,13,0,0,1,10));//年,月,日,时,分,秒,毫秒
console.log(date1.toString());//Tue Jun 13 2017 08:00:01 GMT+0800 (中国标准时间)
console.log(date1.toLocaleString());//2017/6/13 上午8:00:01
console.log(date1.valueOf());//1497312001010
</script>
注意:toString和toLocaleString在不同的浏览器上可能不一样,一般不用这两个方法来显示时间
其他的一些方法:
<script type="text/javascript">
var date1 = new Date();
console.log(date1.toDateString());//Thu Feb 02 2017
console.log(date1.toLocaleDateString());//2017/2/2
console.log(date1.toTimeString());//15:51:07 GMT+0800 (中国标准时间)
console.log(date1.toLocaleTimeString());//下午3:51:07
console.log(date1.toUTCString());//Thu, 02 Feb 2017 07:52:32 GMT
</script>
组件方法
组件方法,是为我们单独获取你想要的各种时间/日期而提供的方法。需要注意的时候,这些方法中,有带UTC的,有不带UTC的。UTC日期指的是在没有时区偏差的情况下的日期值。
<script type="text/javascript">
var box = new Date(Date.UTC(2017,2,10,5,15,10));
console.log('毫秒:'+box.getTime()); //1489122910000,获取日期的毫秒数,和valueOf()返回一致
console.log('年:'+box.getFullYear()); //2017,获取四位年份
console.log('月:'+(1+box.getMonth())); //3,获取月份,没指定月份,从0开始算起
console.log('日:'+box.getDate()); //10,获取日期
console.log('星期:'+box.getDay()); //5,返回星期几,0表示星期日,6表示星期六
console.log('时:'+box.getHours()); //13,返回时,这里获得的是北京时间,加上了8个时区
console.log('UTC时:'+box.getUTCHours()); //5,返回时
console.log('分:'+box.getMinutes()); //15,返回分钟
console.log('秒:'+box.getSeconds()); //10,返回秒数
console.log('毫秒:'+box.getMilliseconds()); //0,返回毫秒数
console.log(box.getTimezoneOffset()); //-480,返回本地时间和UTC时间相差的分钟数,480/60=8
</script>
上面所有的方法除了getDay()和getTimezoneOffset(),都有相应的set方法,如setTime(),setFullYear(),并且除了getTimezoneOffset(),所有的set和get方法都有相应的UTC方法,如getUTCTime(),setUTCTime(),getUTCHours(),setUTCHours()。