当前位置: 首页 > 知识库问答 >
问题:

为什么我从mysql到JavaScript的日期会减少一天?

潘佐
2023-03-14

我有一个todo列表存储在mysql数据库中,存储的列是todoTitle和todoDate,当我将todoDate打印到屏幕上时,你可以在下面的代码中看到,它将显示日期递减一天,例如,如果数据库中的日期显示为2016-12-20,在我的网站上它将显示为2016-12-19。

如果你想知道为什么todoDate会变成string,然后变成substring,那是因为如果我不这么做,它会像这样打印出来:2016-12-19t23:0000:00.000z

var xhr = new XMLHttpRequest();                 // Create XMLHttpRequest object

xhr.onload = function() {// When readystate changes
// The following conditional check will not work locally - only on a server
if(xhr.status === 200) {                      // If server status was ok
responseObject = JSON.parse(xhr.responseText);

// BUILD UP STRING WITH NEW CONTENT (could also use DOM manipulation)
var newContent =
    "<tr>" +
    "<td>" + "Activity" + "</td>" +
    "<td>" + "Due Date" + "</td>" +
    "</tr>";
for (var i = 0; i < responseObject.length; i++) { // Loop through object
    newContent += "<tr>";
    newContent += "<td>" + responseObject[i].todoTitle + "</td>";
    newContent += "<td>" + responseObject[i].todoDate.toString().substring(0,10) + "</td>";
    newContent += "</tr>";
}

// Update the page with the new content
document.getElementById('content').innerHTML = newContent;

}
};

//xhr.open('GET', 'data/data.json', true);  // Dummy JSON Data
xhr.open('GET', 'http://127.0.0.1:8000/todo/', true);        // Prepare the request
xhr.send(null);                                 // Send the request

共有1个答案

陆啸
2023-03-14

Z表示“零时偏移”,也称为“祖鲁时间”(UTC)。当您从数据库中查询日期时,有两种可能的情况是日期发生更改,或者在数据库层,或者在应用程序层,将其调整到您所处的时区。

例如,如果数据库设置save time Automatic to UTC,当您获得实际数据时,它将被转换为当前时区。但是从您的示例来看,2016-12-20被转换为2016-12-19T23:00:00.000z,那么我假设您的数据库在日期上的设置是将其保存在某个时区,然后将其转换为UTC。

要修复它,请尝试调整应用程序逻辑或数据库设置,对我来说,我宁愿在应用程序级别上进行操作,并将DB中的日期保存为UTC。

var currentDate = new Date();
var isoDate = currentDate.toISOString();
console.log(currentDate, isoDate);
 类似资料:
  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 有谁知道约会(例如今天)和回溯X天的简单方法吗? 因此,例如,如果我想计算今天之前5天的日期。 问题答案: 尝试这样的事情: 请注意,这将修改日期对象并返回更新日期的时间值。

  • 我想知道在FreeMarker中从今天的日期减去日期的最好方法是什么? 我有一个用户的注册日期在这种格式:2015-06-15 05:12:35.890,我要做的是得到他们注册到现在之间的年数。(全年,不需要1年6个月/1.5年为例) 谁能告诉我做这件事的最好方法吗?

  • 我以这种格式从数据库中获取日期: 日期格式 当我使用这个字符串创建javascript日期对象时,它会在日期的前一天构建。 您可以在控制台中测试: 你将得到1月31日!我测试了许多理论,但没有一个回答这个问题。 这一天不是从零开始的,否则它将给出2月00日,而不是1月31日 它不是执行数学方程,从月份和/或年份中减去日期 日期(2015-02-01)=1969年12月31日星期三 日期("2015

  • 我们正在使用jOOQ与包含以下表的MySQL数据库进行对话: 我们已经启用了对JSR-310类型的支持,所以我们在Java/Kotlin端使用来映射它。 注意选择如何在上进行筛选,但是结果表显示。 这是一个测试,在我的本地机器(UTC+10)上运行,对本地运行的标准Docker映像进行测试。 尽管使用了,但我认为我们遇到了一些时区问题,但是我不能通过直接讨论JDBC来重现这个问题。我尝试在其他测试

  • 我在Pytorch中用LSTM-线性模块构建了一个分类问题(10个类)的模型。我正在训练模型,对于每个时代,我在训练集中输出损失和准确性。产出如下: 纪元:0开始 损失:2.301875352859497 会计科目:0.1138888889 时代:1开始<损失:2.2759320735931396 会计科目:0.29 时代:2开始<损失:2.2510263919830322 会计科目:0.4872

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像: