getDate()返回日期不一致問題引起的bug

問題描述

最近在webapp的開發中遇到一個Date對象中getDate獲取日期的兼容性問題,Date對象的getDate方法返回的日期和傳入的日期不一致,例如:javascript

在android 4.3如下版本,getDate返回的日期會有一天的誤差java

var d = new Date('1987/04/12');
        d.getDate(); // 目標是返回12,但部分機型會返回11

問題排查

通過一番折騰Google搜索查找資料,初步認爲是如下兩個問題致使:android

一、Date對象初始化兼容性問題

Date對象初始化有如下幾種方式:web

new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

其中,第三種方式是經過日期字符串進行初始化,這個日期字符串必須符合Date.parse()的合法日期格式。segmentfault

new Date('2016-09-25'); // 這種格式沒法被全部瀏覽器識別,存在兼容性問題 
    new Date('2016/09/25'); // 基於'/'格式的日期字符串,被各個瀏覽器所普遍支持的

二、getDate受時區影響問題

在使用測試機進行調試的時候,把時區改變會致使取值有問題,目前還肯定是什麼問題。
詳見getDate返回錯誤日期瀏覽器

更多閱讀

getDate返回錯誤日期
Date對象詳解
Date.parse()詳解
JS原生Date類型方法的一些冷知識
http://stackoverflow.com/questions/4371252/javascript-getdate-problem?rq=1app

相關文章
相關標籤/搜索