给定的日期是2016-02-04.那假设是2016年2月4日.但是当我使用时new Date(),它会返回,Wed Feb 03 2016 16:00:00 GMT-0800 (PST)而不是Thu Feb 04....
以下是我真正做的事情:
var _entryDate = new Date("2016-02-04");
console.log(_entryDate); // Wed Feb 03 2016 16:00:00 GMT-0800 (PST)
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,如何得到我想要的结果,即2月4日而不是前一天呢?
您使用的格式被解释为UTC日期,因此假定时间是西欧的午夜.那比你早8个小时.
您可以通过添加T00:00-0800日期字符串来强制解释时区.您自己解析日期并使用数字年,月和日期参数构造Date实例可能会更加健壮.
var dateArray = "2016-02-04".split("-");
var year = dateArray[0];
var month = parseInt(dateArray[1], 10) - 1;
var date = dateArray[2];
var _entryDate = new Date(year, month, date);
alert(_entryDate);Run Code Online (Sandbox Code Playgroud)
按照 @RobG 的建议删除了不必要的parseInt内容monthyear
我不知道 Pointy 指的是什么(如无知)。我从来不知道日期构造函数会根据传递的字符串格式回退到 UTC。这样 Date 构造函数将始终使用本地时区构建 Date。无论如何,使用带有数字参数的日期构造函数总是好的。