JavaScript中的 Date.parse(),Date.UTC().

来源:互联网 发布:console显示日志java 编辑:程序博客网 时间:2024/06/07 00:41

ECMAScript中的Date类型是在早起的Java中的java.util.Date类基础上构建的.  Date()类型是ECMAScript内置的引用类型之一,Date类型使用UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜开始经过的毫秒数保存日期。 (Ps:行话,慢慢看啊,主要是是想讲Date.parse()方法,Date.UTC()方法.).


创建日期对象:var now = new Date();


I:调用Date()不传参时,新建对象自动获取当前日期和时间.例如:

var nowDate = new Date();document.write(nowDate);

结果:Wed Oct 04 2017 15:57:14 GMT+0800 (中国标准时间);

II:传参时:某个日期距UTC时间1970.1.1午夜至该日期止经过的毫秒数.

JavaScript提供Date.parse() 和 Date.UTC()来计算该毫秒数.


Date.parse():

参数:一个表示日期的string.

返回值:相应日期距UTC1970.1.1的毫秒数. 由此便可创建一个日期对象:

var nowDate = new Date(Date.parse('10/4/2017'));document.write(nowDate);
如果只讲这些那肯定没卵用,而调用该函数主要存在的问题是日期格式!那怎样才算能被浏览器正确解析的日期格式呢?


可解析的格式如下(可能不具体)

- 短日期:须符合以' / '分隔的'月/日/年'格式,如10/4/2017.(Chrome.FireFox,IE下兼容) ,"2017-10-04"格式 ( 在FireFox、Chorme高版本,IE9+环境下都可被正确解析, 其他情况下返回NaN).

- 长日期:须符合"英文月名 日,年",如:October 4,2017. 或者"英文月名 日 年",如"October 4 2017".注意

该格式下不会考虑顺序,后台自动检索 ; 

- “英文星期几 英文月名 日 年 时:分:秒 时区”,如Wed Oct 4 2017 00 :00:00 GMT-0800.

- ISO 8601扩展格式:YYYY-MM-DDTHH:mm:ss:sssZ(例如 2017-10-04T00:00:00)(需兼容ECMA5).

注意:

- FireFox下“2017-10-04”在高版本已经解决,如果浏览器返回NaN, 可采用下面的代码来解决兼容问题:

(date_str.replace(/-/g,'/');
- 若传入的字符串不能表示日期,那么会返回NaN.

- 下面的代码等价,直接传入字符串,后台会调用Date.parse()方法去解析.

var nowDate = new Date('10/4/2017');var nowDate = new Date(Date.parse('10/4/2017'));


Date.UTC():

参数:年份,基于0的月份,月内某一天(1-31),小时数(0-23),分钟,秒,毫秒.(Ps: 只前两个参数必需,省略月中,假设为1,

省略其他参数假设为0).

返回值:表示日期的毫秒数.

多余的就不说了,千篇一律,但是有一点还是要注意的:将' Date.UTC的返回值' 或者 ' 日期 ' 传入Date参中的区别.


' Date.UTC的返回值 ' 或者 ' 日期 ' 传入Date参中的区别.

I : Date.UTC的返回值:

var nowDate = new Date(Date.UTC(2017,9));document.write(nowDate);
Chorme下的显示:Sun Oct 01 2017 08:00:00 GMT+0800 (中国标准时间).  表示创建:GMT时间2017年10月1日早8点(北京、重庆、香港时区).

II:日期:

var nowDate = new Date(2017,9);document.write(nowDate);
Chorme下的显示:Sun Oct 01 2017 00:00:00 GMT+0800 (中国标准时间). 表示创建:GMT时间2017年10月1日午夜.


而出现上面两种情况的原因是:直接传入日期作为Date的参数是基于系统设置的本地时区创建的日期对象.


大概就这么多要提醒的,有些参考了其他人的思想,有不对的地发请大家提出来哦。