問題描述
最近在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