簡體   English   中英

SQL日期與某些日期的差異

[英]SQL date discrepancy with some dates

我正在處理日期問題。

因此,在應用程序中,我有一個表,其中包含一些用戶記錄,其中包括出生日期字段(datetime sql類型)。 問題是,對於出生日期在1954年之前的一些用戶,日期沒有得到適當反映。

例如,我有一個用戶的出生日期是11/08/1920但是當我通過服務器腳本設置出生日期時,它最終得到值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);

}

這些是電子表格中的值(它們是字符串,而不是日期):

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

但是,不知怎的,我總是得到這個:

在此輸入圖像描述

如你所見,1954年之前的日期存在差異。到目前為止,我已嘗試過其他一些事情,例如更改此部分:

if(record){
  var dob = new Date(date);
  record.dateOfBirth = dob;
  allRecs.push(record);
}

對此:

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);
}

而上述結果也是如此。 我在1954年之后嘗試了其他日期,他們似乎也錯了。 例如, 05/19/1968反映了05/18/1968 23:00:00 所以到目前為止我最好的猜測是,這可能與日光節約有關嗎?

在平台之間轉換日期的蛇坑

嘗試將值設置為UTC或只是將它們格式化為MySQL的datetime格式

下面的代碼段中顯示的第一個選項要求您在SQL中轉換格式:

看到這個答案: MySQL yyyy-mm-ddThh:mm:ss.sssZ到yyyy-mm-dd hh:mm:ss

DATE_FORMAT(STR_TO_DATE(«string»,'%Y-%m-%dT%H:%i:%s.000Z'),'%Y-%m-%d %H:%i:%s');

 //Using Z to set to UTC let allRecs = []; document.querySelector("pre").textContent.split("\\n").forEach(function(element) { if (element != "") { const dob = new Date(element + "Z"); //Z forces te date to be in UTC with zero time offzet or: 00:00:00 const dateOfBirth = dob; allRecs.push(dateOfBirth); } }); console.log(allRecs); allRecs = []; //format to MySQL datetime format document.querySelector("pre").textContent.split("\\n").forEach(function(element) { if (element != "") { element = element.replace("T", " "); //replace T with space //now the string is in the datetime format for MySQL allRecs.push(element); } }); console.log(allRecs); 
 <pre> 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 </pre> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM