Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我从mysql的日期在javascript中减少了一天?_Javascript_Html_Mysql_Node.js_Date - Fatal编程技术网

为什么我从mysql的日期在javascript中减少了一天?

为什么我从mysql的日期在javascript中减少了一天?,javascript,html,mysql,node.js,date,Javascript,Html,Mysql,Node.js,Date,我有一个todo列表存储在mysql数据库中,存储的列是TODOTTLE和todoDate,当我将todoDate打印到屏幕上时,正如您在下面的代码中看到的,它将显示递减一天的日期,例如,如果数据库中的日期显示2016-12-20,它将在我的网站上显示2016-12-19 如果您想知道为什么todoDate被做成字符串,然后再变成子字符串,那是因为如果我不这样做,它会像这样打印出来:2016-12-19T23:00:00.000Z var xhr = new XMLHttpRequest();

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

如果您想知道为什么todoDate被做成字符串,然后再变成子字符串,那是因为如果我不这样做,它会像这样打印出来:2016-12-19T23:00: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
var xhr=new-XMLHttpRequest();//创建XMLHttpRequest对象
当readystate更改时,xhr.onload=function(){//
//以下条件检查在本地不起作用-仅在服务器上起作用
如果(xhr.status==200){//如果服务器状态正常
responseObject=JSON.parse(xhr.responseText);
//使用新内容构建字符串(也可以使用DOM操作)
var新内容=
"" +
“+”活动“+”+
“+”截止日期“+”+
"";
对于(var i=0;i
Z表示“零小时偏移”,也称为“祖鲁时间”(UTC)。当您从数据库查询日期时,有两种可能的情况是日期发生更改,即在数据库层或应用程序层,将其调整到您所在的时区

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

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

尝试以下方法以了解差异,并为您提供解决问题的提示:

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

时区申请?您看到23:00和
Z
的完整时间戳了吗?关于
.toStrong().substring()
,您是否无法格式化日期服务器端?这将解决ISO日期字符串格式问题。另外,您能为我提供一个
responseObject[i].todoDate
的值和类型吗?@VaoTsun它在我的mysql数据库中是数据类型TIMESTAMP,但我将它在列中更改为日期数据类型,并且它确实以YYYY-MM-DD格式保存在我的数据库中,这正是我想要的,但当我在网站上显示它时,它显示了完整的timestamp@tbirrell由于我是一名初学者,不确定您对这两个问题的要求是什么…=(似乎您使用datetime列类型(但因此“Z”令人困惑,您在服务器上是否有一些额外的处理?)