getDate()返回日期不一致问题引发的bug
问题描述
最近在webapp的开发中遇到一个Date对象中getDate获取日期的兼容性问题,Date对象的getDate方法返回的日期和传入的日期不一致,例如:
在android 4.3以下版本,getDate返回的日期会有一天的偏差
var d = new Date('1987/04/12');
d.getDate(); // 目标是返回12,但部分机型会返回11
问题排查
经过一番折腾Google搜索查找资料,初步认为是以下两个问题导致:
1、Date对象初始化兼容性问题
Date对象初始化有以下几种方式:
new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
其中,第三种方式是通过日期字符串进行初始化,这个日期字符串必须符合Date.parse()的合法日期格式。
new Date('2016-09-25'); // 这种格式无法被所有浏览器识别,存在兼容性问题
new Date('2016/09/25'); // 基于'/'格式的日期字符串,被各个浏览器所广泛支持的
2、getDate受时区影响问题
在使用测试机进行调试的时候,把时区改变会导致取值有问题,目前还确定是什么问题。
详见getDate返回错误日期
更多阅读
getDate返回错误日期
Date对象详解
Date.parse()详解
JS原生Date类型方法的一些冷知识
http://stackoverflow.com/questions/4371252/javascript-getdate-problem?rq=1