javascript - getDate() 返回前一天,但一切似乎都是正确的

标签 javascript

我将一个日期发送回我的后端来创建。

后端收到结束日期:

console.log(req.params.end); // req.params.end > 2019-01-17

我用它创建了一个日期输出对象

var endDate = new Date(req.params.end);
console.log(endDate); endDate > 2019-01-17T00:00:00.000Z (nice)

我开始分隔年/月/日

var endYear = endDate.getFullYear();
var endMonth = endDate.getMonth() + 1; // 1 - 12 range
var endDay = endDate.getDate();

但是日期总是错误的,是前一天:

console.log('end date : ', endDay); // end date : 16

设置时区没有什么区别(我是东部时间)(在提取日期之前)

var est = { timeZone: "America/New_York" };
endDate.toLocaleString("en-US", est);

我还有一个完全相同的开始日期,并且其行为符合预期:

var startDate = new Date(req.params.year,tmpStartMonth,req.params.day);
console.log(startDate) // startDate > 2019-01-10T05:00:00.000Z (this is correct)

var startDay = startDate.getDate();
console.log(startDay) // startDay > 10

接下来的时间会以某种方式影响我的结果吗?我对这里出了什么问题感到相当困惑。

最佳答案

这就是发生的事情。创建 Date 对象时,您将获得 UTC 日期。在您的情况下,您将获得 2019 年 1 月 17 日 00:00 UTC。我想您在美国,所以该日期对您来说实际上是 01/16。

var utcDate = new Date('2019-01-17T00:00:00.000Z');
console.log(utcDate);
console.log(utcDate.getDate()); // 16

如果您使用正确的时区创建日期,您将获得您期望的日期。以下是太平洋时间 (UTC-8) 的示例。

var myDate = new Date('2019-01-17T00:00:00.000-08:00');
console.log(myDate);
console.log(myDate.getDate()); // 17

关于javascript - getDate() 返回前一天,但一切似乎都是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54240908/

相关文章:

javascript - 在 RAILS 中的 <body onLoad=function()> 中插入 javascript 调用

javascript - 阻止下载出现在 Chrome 下载栏上

Javascript如何确保显示JQuery .append

javascript - 从文本框输入并添加到列表中不起作用

javascript - Node.jsexpress.Router导入新路由时出现ERR_MODULE_NOT_FOUND

javascript - Protractor - 在对话框容器中向下滚动以单击元素

javascript - 即使正确,使用 ajax 验证的 reCAPTCHA 也总是返回错误

javascript - jquery如何在子表单div中选择表单元素

javascript - 解决点击操作按钮冲突的可能方法

javascript - 无法修改计时器间隔函数以在 JavaScript 中给出总持续时间