关于html:为什么我的日期来自mysql在javascript中减少了一天?

Why is my date from mysql decrementing by one day in javascript?

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

如果你想知道为什么将todoDate变成字符串然后子串,那是因为如果我不这样做它会打印出来像这样:2016-12-19T23:00:00.000Z

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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


Z表示"零小时偏移",也称为"祖鲁时间"(UTC)。 当您从数据库查询日期时,有两种可能的情况是日期更改,无论是在数据库层还是在应用程序层,将其调整为您所在的时区。

因此,例如,如果数据库设置在获得实际数据时自动将时间节省为UTC,则会将其转换为当前时区。 但是从您的示例2016-12-20转换为2016-12-19T23:00:00.000Z然后我假设您的日期数据库设置将其保存在某个时区然后将其转换为UTC。

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

试试这个看看差异,可以给你提示解决你的问题:

1
2
3
var currentDate = new Date();
var isoDate = currentDate.toISOString();
console.log(currentDate, isoDate);