d = new Date("2016-05-31");
alert(d);
我不确定为什么会发生这种情况,如果我在印度时区它显示正常。
答案 0 :(得分:2)
您使用缩写的ISO时间字符串初始化日期实例,因此默认时区为GMT(Z)。相反,您可以使用接受数字年,月和日的三参数构造函数:
var d = new Date(2016, 4, 31);
这将假设当地时区。请注意,月份从零开始编号。
答案 1 :(得分:1)
您可以使用以下方式创建日期:
var date = new Date(2016, 4, 31);
或者,您可以使用当前方法设置日期的UTC小时数(不太可取,给定浏览器/区域日期不兼容):
var date = new Date("2016-05-31");
date.setUTCHours(0);
尝试此脚本并检查控制台的输出以突出显示差异:
var date1 = new Date('2016-05-31');
var date2 = new Date(2016, 4, 31);
var str1 = date1.toISOString();
var str2 = date2.toISOString();
console.log('date1', date1, str1, date1.getUTCHours(), date1.toUTCString());
console.log('date2', date2, str2, date2.getUTCHours(), date2.toUTCString());
date1.setUTCHours(0);
date2.setUTCHours(0);
console.log('date1', date1, str1, date1.getUTCHours(), date1.toUTCString());
console.log('date2', date2, str2, date2.getUTCHours(), date2.toUTCString());
您可能还希望查看Moment.js时间库。具体来说,是Moment.js timezone库。