js Date

Date类型使用自UTC(国际协调时间)1970年1月1日零时开始经过的毫秒数来保存日期。在这种数据格式存储条件下,Date类型保存的日期能够精确到1970年1月1日之前或之后的285616年。

创建一个日期对象:

var date = new Date();
document.write("当前时间:"+ date);

下面是不同浏览器的时间格式:

Chrome   当前时间:Sat Oct 15 2016 21:37:19 GMT+0800 (中国标准时间)

Firefox      当前时间:Sat Oct 15 2016 21:38:50 GMT+0800

IE11          当前时间:Sat Oct 15 2016 21:39:37 GMT+0800 (中国标准时间)

IE10-         当前时间:Sat Oct 15 21:40:33 UTC+0800 2016

Safari       当前时间:Sat Oct 15 2016 21:41:22 GMT+0800 (Öйú±ê׼ʱ¼ä)

GMT和UTC的区别

格林尼治标准时间(GMT,旧译“格林威治平均时间”或“格林威治标准时间”)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
  理论上来说,
格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度
不均匀,这个时刻可能和实际的太阳时相差16分钟。
  地球每天的自转是有些不规则的,而且正在缓慢减速。
现在的标准时间——协调世界时(UTC)——由原子钟提供。
  自1924年2月5日开始,
格林尼治天文台
每隔一小时会向全世界发放调时信息
======================
协调世界时(UTC)
  协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。它从英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”而来。
  中国大陆采用
ISO8601-1988的《数据元和交换格式信息交换日期和时间表示法》(GB/T
7408-1994)称之为国际协调时间。
 
中国台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO8601
类似)称之为世界统一时间。
  协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。
  中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。
new Date()构造函数不传参情况下,新建的对象自动获取当前的日期和时间。如果需要根据特定的日期时间创建日期对象,须传入表示该日期的毫秒数(即从UTC时间的1970年1月1日午夜零时至该日期止经过的毫秒数),为简化这一过程ECMAScript提供了两个方法:Date.parse()和Date.UTC()。

Date.parse()地区设置为美国的浏览器通常接受下列日期格式:

月/日/年

英文月名 日,年

英文星期几 英文月名 日 年 时:分:秒 时区

如果传入Date.parse()方法的参数不能表示日期格式,所有浏览器返回Invalid Date;

如果可以表示日期的值,但超过范围,那么针对不同浏览器会返回不同结果(Chrome和Safari返回Invalid Date;其他浏览器根据表示的日期往后顺延日期<2016年10月34日,10月只有31天,往后顺延就是11月3号>,至于IE版本的问题只是它们参考不同的时间表示,返回内容还是一样的);

直接将表示日期的字符串传给Date(),也会在后台调用Date.parse(),所以加和不加Date.parse()是等效的;

var date = new Date();
document.write(date + "<br>");//Sun Oct 16 2016 12:07:09 GMT+0800 (中国标准时间)
var date1 = new Date("tt 16,2016");
document.write(date1 + "<br>");//此字符串不能解析成日期字符串格式,所有浏览器返回Invalid Date
var date2 = new Date(Date.parse("October 16, 2016"));
document.write(date2 + "<br>"); //Sun Oct 16 2016 00:00:00 GMT+0800 (中国标准时间)
var date3 = new Date(Date.parse("October 34, 2016"));
document.write(date3 + "<br>");
//IE10-   Tue Nov 3 00:00:00 UTC+0800 2016
//IE11    Tue Nov 03 2016 00:00:00 GMT+0800 (中国标准时间)
//Firefox Tue Nov 03 2016 00:00:00 GMT+0800
//Chrome  Invalid Date
//Safari  Invalid Date

var date4 = new Date("October 34, 2016");
document.write(date4 + "<br>");//Invalid Date或者Thu Nov 03 2016 00:00:00 GMT+0800
var date5 = new Date("October 16, 2016");
document.write(date5 + "<br>");//Sun Oct 16 2016 00:00:00 GMT+0800 (中国标准时间)
var date6 = new Date('10/16/2016');
document.write(date6 + "<br>");//Sun Oct 16 2016 00:00:00 GMT+0800 (中国标准时间)
var date7 = new Date('Sunday October 16,2016 11:34:52 GMT+0800');
document.write(date7 + "<br>");//Sun Oct 16 2016 00:00:00 GMT+0800 (中国标准时间)
document.write("我也执行了");
Date.UTC同样也返回表示日期的毫秒数
new Date( year, month, date, hour, min, sec)  按给定的参数创建一日期对象
  参数说明:
  year的值为:年份位数为1位或者2位则年份为19xx年(20世纪),3位则年份第一位是0(不合理,不要用三位的年份),四位正常表示年份;
  month的值域为0~11,0代表1月,11表代表12月;
  date的值域在1~31之间(根据实际情况判断某年的某月是否有这天);
  hrs的值域在0~23之间。从午夜到次日凌晨1点间hrs=0,从中午到下午1点间hour=12;

  min和sec的值域在0~59之间。

这种创建方式如果要指定某时某刻则它前面的参数必须一一列举,否则会报错;

月和日默认为1,时、分、秒默认为0;

只有一个参数就会认为是将距1970年1月1日零时的时间戳赋给日期,所以2016毫秒就是2秒;

日期时间表示范围超过正常范围,会往后顺延(例如:2016年10月32日,变成了2016年11月1日;现在Safari和Chrome也不再是返回Invalid Date)

Date()也在模仿Date.UTC(),但没有规定小时的时候Date()和Date.UTC还是有差别的,Date()的日期时间是按本地时区创建的,而不是GMT;

var date = new Date();
document.write(date + "<br>");//当前时间:Sun Oct 16 2016 12:30:49 GMT+0800
var date1 = new Date(0);
document.write(date1 + "<br>");//Thu Jan 01 1970 08:00:00 GMT+0800
var date2 = new Date(2016);
document.write(date2 + "<br>");//Thu Jan 01 1970 08:00:02 GMT+0800
var date7 = new Date(Date.UTC(2016,3));
document.write(date7 + "<br>");//Fri Apr 01 2016 08:00:00 GMT+0800
var date8 = new Date(6,3);
document.write(date8 + "<br>");//Sun Apr 01 1906 00:00:00 GMT+0800
var date9 = new Date(16,3);
document.write(date9 + "<br>");//Sat Apr 01 1916 00:00:00 GMT+0800
var date10 = new Date(116,3);
document.write(date10 + "<br>");//Wed Apr 01 0116 00:00:00 GMT+0800
var date3 = new Date(2016,3);
document.write(date3 + "<br>");//Fri Apr 01 2016 00:00:00 GMT+0800
var date11 = new Date(1876,3,4);
document.write(date11 + "<br>");//Tue Apr 04 1876 00:00:00 GMT+0800
var date4 = new Date(2016,09,3);
document.write(date4 + "<br>");//Mon Oct 03 2016 00:00:00 GMT+0800
var date5 = new Date(2016,9,16,12,35,34);
document.write(date5 + "<br>");//Sun Oct 16 2016 12:35:34 GMT+0800
var date6 = new Date(2016,9,32,12,35,34);
document.write(date6 + "<br>");//Tue Nov 01 2016 12:35:34 GMT+0800
Date的LocaleString()按当前时区形式表示时间,Safari没有;

toString()显示的格式就是平时new Date()后的格式,看来new Date()都有调用toString()

valueOf()返回表示的日期距1970年1月1日零时的毫秒数(时间戳)

var date = new Date();
document.write(date.toLocaleString() + "<br>");//IE:2016年10月16日 13:18:14;Chrome和Firefox:2016/10/16 下午1:18:14;Safari:Sunday, October 16, 2016 13:18:14
document.write(date.toString() + "<br>");//Sun Oct 16 2016 13:18:22 GMT+0800所有浏览器表示形式一样,只是后面有没有显示(中国标准时间),Safari中国时间四个字显示乱码或者IE10-为UTC表示
var date1 = new Date(2016,9,16,13,24,16);
document.write(date1.valueOf());//1476595456000

日期格式化方法

toGMTString()与toUTCString()等价的方法,存在的目的是为了向后兼容;不过ECMAScript推荐现在编写的代码一律用toUTCString();

var date = new Date();
document.write(date.toDateString() + "<br>");//Sun Oct 16 2016
document.write(date.toTimeString() + "<br>");//13:38:14 GMT+0800 (中国标准时间)
document.write(date.toLocaleDateString() + "<br>");//IE:‎2016‎年‎10‎月‎16‎日;Chrome和Firefox:2016/10/16;Safari:Sunday, October 16, 2016
document.write(date.toLocaleTimeString() + "<br>");//IE和Safari:13:40:55;Chrome:下午1:40:55
document.write(date.toUTCString() + "<br>");//Sun, 16 Oct 2016 05:42:33 GMT IE10-:Sun, 16 Oct 2016 05:42:52 UTC
document.write(date.toGMTString() + "<br>");//Sun, 16 Oct 2016 05:42:33 GMT IE10-:Sun, 16 Oct 2016 05:42:52 UTC

获取某时间距1970年1月1日零时的时间戳:

Date.parse(dateVal)虽然声称是返回日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数,但是实际上返回的是精确到秒的毫秒数,而并非实际的毫秒。并且这个数字是非四舍五入的,也就是即使是1秒999毫秒,也按照1000毫秒来输出。而getTime()则返回实际毫秒数。

var date = new Date();//返回当前的日期时间
//getTime()、valueOf()和new Date()返回 1970 年 1 月 1 日至今的毫秒数。
document.write(date + "<br>");//Sun Oct 16 2016 15:31:51 GMT+0800
document.write(date.getTime() + "<br>");//1476603111437
document.write(date.valueOf() + "<br>");//1476603111437
var date1 = +new Date();
document.write(date1 + "<br>");//1476603111437
var date2 = Date.parse(date);
document.write(date2 + "<br>");//1476603111000毫秒始终是000
时期/时间组件方法

UTC指的是在没有时区偏差的情况下(将日期转换为GMT时间)的日期值。其实UTC日期没什么好说的就是比我们中国所在的东八区慢8小时;

getTime() 	     	 返回1970年1月1日零时至今的毫秒数。
setTime(毫秒) 	     以毫秒设置日期,会改变日期。
getFullYear() 	     取得四位数的年份。
getYear() 	     	 请使用getFullYear() 方法代替。
getUTCFullYear()	 返回UTC日期的4位数年份。
setFullYear(年)      设置日期的年份,传入的年份值必须是四位数。
setUTCFullYear()     设置UTC日期的年份,传入的年份值必须是四位数。
setYear(年) 	     请使用 setFullYear() 方法代替。
getMonth() 	     	 返回日期中的月份。0表示一月,11表示十二月。
getUTCMonth() 	     返回UTC日期中的月份。0表示一月,11表示十二月。
setMonth(月)         设置日期的月份。传入的月份值必须大于0,超过11则增加年份。
setUTCMonth(月)      设置UTC日期的月份。传入的月份值必须大于0,超过11则增加年份。
getDate() 	     	 返回日期月份中的天数。(1到31)
getUTCDate() 	     返回UTC日期月份中的天数。(1到31)
setDate(日) 	     设置日期月份中的天数。如果传入的值超过了改约中应有的天数,则增加月份。
setUTCDate(日) 	     设置UTC日期月份中的天数。如果传入的值超过了改约中应有的天数,则增加月份。
getDay() 	     	 返回日期星期中的星期几。(其中0返回星期天,1返回星期六)。
getUTCDay() 	     返回UTC日期星期中的星期几。(其中0返回星期天,1返回星期六)。
getHours() 	     	 返回日期中的小时数(0 ~ 23)。
getUTCHours() 	     返回UTC日期中的小时数(0 ~ 23)。
setHours(时)   	     设置日期中的小时数。传入的值超过了23则增加月份中的天数。
setUTCHours(时)      设置UTC日期中的小时数。传入的值超过了23则增加月份中的天数。
getMinutes()         返回日期中的分钟数(0 ~ 59)。
getUTCMinutes()      返回UTC日期中的分钟数(0 ~ 59)。
setMinutes(分)       设置日期中的分钟数。传入的值超过59则增加小时数。
setUTCMinutes(分)    设置UTC日期中的分钟数。传入的值超过59则增加小时数。
getSeconds()         返回日期中的秒数 (0 ~ 59)。
getUTCSeconds()      返回UTC日期中的秒数 (0 ~ 59)。
setSeconds(秒)       设置日期中的秒钟 (0 ~ 59)。传入的值超过了59会增加分钟数。
setUTCSeconds(秒)    设置UTC日期中的秒钟 (0 ~ 59)。传入的值超过了59会增加分钟数。
getMilliseconds()    返回日期中的毫秒(0 ~ 999)。
getUTCMilliseconds() 返回UTC日期中的毫秒(0 ~ 999)。
setMilliseconds()    设置日期中的毫秒 (0 ~ 999)。
setUTCMilliseconds() 设置UTC日期中的毫秒 (0 ~ 999)。
getTimezoneOffset()  返回本地时间与UTC时间相差的分钟数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值