SQL日期与某些日期的差异

Mor*_*smo 5 javascript mysql google-cloud-sql google-app-maker

我正在处理日期问题。

因此,在应用程序中,我有一个表,该表具有一些用户记录,其中包括出生日期字段(datetime sql类型)。问题是,对于某些出生日期在1954年之前的用户,日期无法正确反映。

例如,我有一个用户的生日是1920年11月8日,但是当我通过服务器脚本设置生日时,它的最终值为11/07/1920 23:23:24

我从电子表格中获取日期值,服务器脚本如下所示:

function importDOBs(){

  var allRecs = [];

  var ss = SpreadsheetApp.openById("adfsasdfasdfasdfasdfasdf");
  var sheet = ss.getActiveSheet();

  var data = sheet.getRange(2,4,sheet.getLastRow(),2).getValues();
  for(var i=0; i<5; i++){
    var row = data[i];
    var date = row[0];
    var oldMrn = row[1];

    var query = app.models.purgedRecords.newQuery();
    query.filters.oldMrn._equals = oldMrn;
    var record = query.run()[0];
    if(record){
      var dob = new Date(date);
      record.dateOfBirth = dob;
      allRecs.push(record);
    }
  }

  app.saveRecords(allRecs);

}
Run Code Online (Sandbox Code Playgroud)

这些是电子表格中的值(它们是字符串,而不是日期):

1954-03-04T00:00:00
2014-03-01T00:00:00
1951-10-20T00:00:00
1920-11-08T00:00:00
1938-09-27T00:00:00
Run Code Online (Sandbox Code Playgroud)

但是,无论如何我总是得到这个:

在此处输入图片说明

如您所见,1954年之前的日期存在差异。到目前为止,我已经尝试了其他方法,例如更改此部分:

if(record){
  var dob = new Date(date);
  record.dateOfBirth = dob;
  allRecs.push(record);
}
Run Code Online (Sandbox Code Playgroud)

对此:

if(record){
  var dob = Utilities.formatDate(new Date(date),"GMT","yyyy-MM-dd'T'HH:mm:ss'Z'");
  var birthDate = new Date(dob);
  record.dateOfBirth = birthDate;
  allRecs.push(record);
}
Run Code Online (Sandbox Code Playgroud)

以上结果是一样的。1954年之后,我尝试了其他约会,但它们似乎也错了。例如05/19/1968反映05/18/1968 23:00:00。所以到目前为止,我最好的猜测可能与日光节约有关吗?

Mou*_*ser 1

\n

平台间转换日期的蛇坑

\n
\n\n

尝试将值设置为 UTC 或将其格式化为datetimeMySQL 的格式

\n\n

下面代码片段中显示的第一个选项要求您转换 SQL 格式:

\n\n

请参阅此答案:MySQL yyyy-mm-ddThh:mm:ss.sssZ 到 yyyy-mm-dd hh:mm:ss

\n\n
DATE_FORMAT(STR_TO_DATE(\xc2\xabstring\xc2\xbb,\'%Y-%m-%dT%H:%i:%s.000Z\'),\'%Y-%m-%d %H:%i:%s\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

\r\n
\r\n
DATE_FORMAT(STR_TO_DATE(\xc2\xabstring\xc2\xbb,\'%Y-%m-%dT%H:%i:%s.000Z\'),\'%Y-%m-%d %H:%i:%s\');\n
Run Code Online (Sandbox Code Playgroud)\r\n
//Using Z to set to UTC\r\n\r\nlet allRecs = [];\r\ndocument.querySelector("pre").textContent.split("\\n").forEach(function(element) {\r\n  if (element != "") {\r\n    const dob = new Date(element + "Z"); //Z forces te date to be in UTC with zero time offzet or: 00:00:00\r\n    const dateOfBirth = dob;\r\n    allRecs.push(dateOfBirth);\r\n  }\r\n});\r\nconsole.log(allRecs);\r\n\r\nallRecs = [];\r\n//format to MySQL datetime format\r\ndocument.querySelector("pre").textContent.split("\\n").forEach(function(element) {\r\n  if (element != "") {\r\n    element = element.replace("T", " "); //replace T with space\r\n    //now the string is in the datetime format for MySQL\r\n    allRecs.push(element);\r\n  }\r\n});\r\nconsole.log(allRecs);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n