2016-08-24 66 views
0

日期格式问题与Javscript日期()。Javascript日期问题返回1天小于设置日期 - 时区

背景:我正在修改Jquery UI datepicker,并且遇到了月份和日期返回不正确值的问题。

$('#datefield').datepicker({ 
    beforeShowDay: function(date) { 
     // issues experienced here - isolation test code below 
     // Mon Aug 01 2016 00:00:00 GMT+1000 (AUS Eastern Standard Time) 
     // DateMonth: 8 - ISO: 20160731 
    } 
}) 

基于JS日期()建设上http://www.w3schools.com/jsref/jsref_obj_date.asp

示例代码:

var d1 = new Date(); 
var d1Month = d1.getMonth()+1; 
var d1ISO = d1.toISOString().slice(0,10).replace(/-/g,""); 

console.log(d1); 
console.log('1Month: '+d1Month+' ISO: '+d1ISO); 

var d2 = new Date(2016,06,31); 
var d2Month = d2.getMonth()+1; 
var d2ISO = d2.toISOString().slice(0,10).replace(/-/g,""); 

console.log(d2); 
console.log('2Month: '+d2Month+' ISO: '+d2ISO); 

var d3 = new Date('2016-07-31'); 
var d3Month = d3.getMonth()+1; 
var d3ISO = d3.toISOString().slice(0,10).replace(/-/g,""); 

console.log(d3); 
console.log('3Month: '+d3Month+' ISO: '+d3ISO); 

var d4 = new Date(2016, 07, 01); 
var d4Month = d4.getMonth()+1; 
var d4ISO = d4.toISOString().slice(0,10).replace(/-/g,""); 

console.log(d4); 
console.log('4Month: '+d4Month+' ISO: '+d4ISO); 

输出(控制台):

Wed Aug 24 2016 11:30:51 GMT+1000 (AUS Eastern Standard Time) 
1Month: 8 ISO: 20160824 

*Sun Jul 31 2016 00:00:00 GMT+1000 (AUS Eastern Standard Time) 
2Month: 7 ISO: 20160730 

Sun Jul 31 2016 10:00:00 GMT+1000 (AUS Eastern Standard Time) 
3Month: 7 ISO: 20160731 

*Mon Aug 01 2016 00:00:00 GMT+1000 (AUS Eastern Standard Time) 
4Month: 8 ISO: 20160731 

为什么 'D2' 的回报20160730当该对象返回7月31日?

为什么'd4'在设定的日期是8月1日时会返回20160731?

为什么d3能正常工作?

我的假设是,ISO日期以某种方式减去GMT + 10并获得前一天。

我知道这一步(protoype函数)来尝试和格式​​ ,但它仍然是一个谜我为什么上面产生不同的结果...

return [this.getFullYear(), !mm[1] && '0', mm, !dd[1] && '0', dd].join(''); 
+0

w3schools是一个质量差的网站。 – RobG

回答