格式化纯文本到日期

Format plain text to date

目标

编写执行以下操作的脚本:

问题

我可以获取数据,但它会将所有内容以纯文本形式写回。因此,日期不是写成 "yyyy-MM-dd",而是写成这样:
Mon Oct 19 2020 01:00:00 GMT-0400(东部夏令时)

期望: screenshot of dates as "yyyy-MM-dd"

结果: screenshot of dates as whatever this garble is

我已经 google 进行了广泛的研究,但似乎找不到解决方案。我相信我的问题是在 Array.map 中使用 toString()。我不确定如何将 map 方法限制为仅需要修改的列。现在它影响整个阵列。
(我使用了的代码来写这部分)

//-----FIND AND REPLACE FOR COMPANY & STATUS ABBREVIATIONS
function replaceInSheet(initArray, to_replace, replace_with){
  //Loop over rows in array
  for(var row in initArray ){
    //Use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = initArray[row].map(function(originalValue){
        return originalValue.toString().replace(to_replace,replace_with);
      });

    //Replace the original row values with the replaced values
    initArray[row] = replaced_values;
  }
}

问题-->如何让我的脚本输出正确地格式化我的两列中的日期?

尝试过的解决方案无效

代码和示例传播sheet

这是我正在使用的全部代码,经过修改后可用于示例 google sheet 我为这个问题创建的。

示例 Google Sheet:
https://docs.google.com/spreadsheets/d/1Ys77hQHHajIo-Xaxyom0SVnyVMZ6bKOT8Smpadd2jv4/edit?usp=sharing

脚本:

// ==================================================
// FUNCTION TO RUN
// ==================================================
function syncData(){
  //Ger Source Data
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var thisSheet = ss.getSheetByName("source");
  var thisData = thisSheet.getRange("A4:M11");
  var initArray = thisData.getValues();

  //Get Target Location
  var toSheet = ss.getSheetByName("target");
  var toRange = toSheet.getRange("A4:M11"); //Range starts at A4

  //CHANGE [LAST, FIRST] TO [FIRST LAST]
  for (var x = 0; x < initArray.length; x++){
    var indexOfFirstComma = initArray[x][0].indexOf(", ");
    if(indexOfFirstComma >= 0){
      //If comma found, split and update values in the values array
      var lastAndFirst = initArray[x][0];
      //Update name value in array
      initArray[x][0] = lastAndFirst.slice(indexOfFirstComma + 2).trim() + " " + lastAndFirst.slice(0, indexOfFirstComma).trim();
    }
  }

  //ABBREVIATE COMPANY
  replaceInSheet(initArray, 'Bluffington School','BLF HS');
  replaceInSheet(initArray, 'Honker Burger','HBGR');
  replaceInSheet(initArray, 'Funky Town','FT');

  //ABBRIVIATE STATUS
  replaceInSheet(initArray, 'Regular','Staff');
  replaceInSheet(initArray, 'Contractual','Part');
  replaceInSheet(initArray, 'Temporary','Temp');
    
  //Clear Target Location
  var toClear = toSheet.getRange("A4:M11")
  toClear.clearContent();

  //Write updated array to target location
  toRange.setValues(initArray);

  //Write timestamp of when code was last run
  setTimeStamp(toSheet);
}


//-----FIND AND REPLACE FOR COMPANY & STATUS ABBREVIATIONS
function replaceInSheet(initArray, to_replace, replace_with){
  //Loop over rows in array
  for(var row in initArray ){
    //Use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = initArray[row].map(function(originalValue){
        return originalValue.toString().replace(to_replace,replace_with);
      });

    //Replace the original row values with the replaced values
    initArray[row] = replaced_values;
  }
}


//-----ADD TIMESTAMP FOR WHEN THE SCRIPT LAST RAN
function setTimeStamp(toSheet) {
  var timestamp = Utilities.formatDate(new Date(), "CST", "yyyy-MM-dd @ h:mm a");
  toSheet.getRange('F1').setValue(timestamp);
}

setNumberFormat('yyyy-MM-dd') 是一个很好的解决方案,但它是 sheet 范围的一种方法。不是数组。

要应用您需要先获取范围的格式。像这样:

toSheet.getRange('G4:G').setNumberFormat('yyyy-MM-dd');

还有一件事 ) 尝试更改此行:

var initArray = thisData.getValues();

至:

var initArray = thisData.getDisplayValues();