又一个IE的坑,时间字符串的转换
来源:互联网 发布:星际战甲人物捏脸数据 编辑:程序博客网 时间:2024/06/06 00:26
在JavaScript中,一般考虑使用Date.parse()函数来解析字符串。根据JavaScript的相关文档,可以得知Date.parse(dateVal)返回的是一个整数值,此整数表示 dateVal 中所提供的日期与 1970 年 1 月 1 日午夜之间相差的毫秒数。
字符串格式(以2012年04月21日为例) IE FF Chrome 2012-4-21X只支持格式2012-04-21√4-21-2013√X√2012/4/21√√√4/21/2013√√√
不过Date.parse()并不能正确解析类似于2012-04-19的这种格式。而格式为4/19/2012的字符串则可以正常运行:
var time = Date.parse("4/19/2012");
此外,通过实际测试,我们发现IE、FF(火狐)、Chrome浏览器中Date.parse()函数支持的部分格式详情如下:
解决方法一:
我们可以将字符串的格式转为2012/4/21
或4/21/2013
等格式,再使用Date.parse()函数进行比较判断。
/** * 接收2012-04-09或2012-4-9格式的字符串,并返回该日期与1970年1月1日 00:00:00的毫秒差值 * @param {String} dateStr * @return {Number} */function getTime(dateStr){ dateStr = dateStr.replace("-", "/"); return Date.parse(dateStr);}/** * 比较两个指定格式的日期字符串,并返回整数形式的比较结果。 * 如果返回正数,则日期dateStr1较大(靠后); * 如果返回负数,则日期dateStr2较大; * 如果返回0,则两者相等。 * @param {String} date1 * @param {String} date2 * @return {Number} */function compareDate(dateStr1, dateStr2){ return getTime(dateStr1) - getTime(dateStr2);}
复制以上代码到需要使用的地方,在直接调用compareDate()函数即可。
由于JavaScript文档要求Date.parse()接收的参数最好符合月/日/年
的格式。因此getTime()函数最好可以如下编写:
/** * 传入yyyy-M(MM)-d(dd)格式的字符串,返回相对于1970-1-1 00:00:00 000的毫秒数差值 * @param {String} dateStr * @return {Number} */function getTime(dateStr){ var dateStr = dateStr.replace(/^(\d{4})-(\d{1,2})-(\d{1,2})$/, "$2/$3/$1"); return Date.parse(dateStr);}
解决办法二:
在stackoverflow上,有这样一段代码:
Date.fromISO= (function(){var diso= Date.parse('2011-04-26T13:16:50Z');if(diso=== 1303823810000) return function(s){return new Date(Date.parse(s));} else return function(s){var day, tz, rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, p= rx.exec(s) || [];if(p[1]){day= p[1].split(/\D/).map(function(itm){return parseInt(itm, 10) || 0;});day[1]-= 1;/**这里使用了UTC进行时间转换,但是中国是用的G8失去,也就是说,比UTC时间早8个小时用UTC转换前要减去多出来的8个小时*/if( day.length>3 ){day[3] -= 8;}day= new Date(Date.UTC.apply(Date, day));if(!day.getDate()) return NaN;if(p[5]){tz= parseInt(p[5], 10)*60;if(p[6]) tz += parseInt(p[6], 10);if(p[4]== "+") tz*= -1;if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);}return day;}return NaN;}})()
这里要注意GMT和UTC的区别
原stackoverflow上的代码是直接转换成了UTC,但是使用中国时区就得减8个小时了。在这里做个记录,给使用stackoverflow上的代码人做个提示
0 0
- 又一个IE的坑,时间字符串的转换
- ie浏览器日期(时间)字符串的坑
- 时间字符串的转换
- 时间与字符串的转换
- 时间、字符串的相互转换
- 字符串与时间的转换
- CocoaPods 的又一个小坑
- EDB分区表的又一个“坑”
- databing 踩的又一个坑
- mysql的时间和字符串的转换
- javascript字符串转换成时间的方式
- 字符串转换成特定的时间格式
- 日期时间与字符串间的转换
- java 时间与字符串之间的转换
- 时间类型与字符串的转换
- 字符串转换成时间的函数
- 关于jackson中时间字符串的转换
- Android 时间和字符串之间的转换
- MobilePhone GPU
- C++ - 派生类访问模板化基类(templatized base class)的命名
- SPRING+ACTIVEMQ+TOMCAT整合
- 程序运行时三种内存分配策略
- ASP.NET远程连接SQL Server“尝试读取或写入受保护的内存”
- 又一个IE的坑,时间字符串的转换
- hibenrnate学习笔记9对象关系映射文件
- 网页宽度自动适应手机屏幕宽度的方法
- iOS 7 交互式过渡
- 致命的错误:python中误输入tab键
- lock wait timeout exceeded try restarting transaction mysql
- boost 编译命令
- poj2479(子串和变形,DP)
- pthread_exit()