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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值