从日期中提取月份和年份,并显示为MMM-YY

时间:2019-12-10 23:38:11

标签: javascript datetime google-apps-script google-sheets

我是Google Apps脚本的新手,我很难进行日期格式转换

我的源列中的数据格式为“ mm / dd / yyyy”。我想将其更改为“ MMM-YY”,即我只需要提取月份和年份。  以下是我失败的尝试

 // Get all values in column A on sheet titled "Transactions"
var ss = SpreadsheetApp.getActiveSpreadsheet();

var sourcesheet = ss.getSheetByName("Transactions");
var targetsheet = ss.getSheetByName("stage");  

  // get source range
  var source = sourcesheet.getRange("A:J");
  //get the data and place in array
  var alldata = sourcesheet.getRange("A:I").getValues();
  Logger.log(alldata.length)  ;

  //********************************************************************************//
  // loop through date column and change format
 for(var i=1; i<alldata.length; i++)    
  {

    alldata[i][0]= new Date(alldata[i][0]);

    var Mnth = alldata[i][0].getMonth() ;
    var Year = alldata[i][0].getYear() ;
    var Day = alldata[i][0].getDay() ;

    var Day2 = new Date(Year,Mnth,Day);

    alldata[i][10] = Utilities.formatDate(Day2, Session.getScriptTimeZone(), "MMM-YY");


  }


  //********************************************************************************//
  // get destination range  
  var destination = targetsheet.getRange(2, 1, alldata.length, 11);

  // clear contents of destination sheet
  destination.clear();
  // copy values to destination range
  destination.setValues(alldata);

}

示例

源列值=“ 01/06/2019”写入输出列“ 1/19/2019”的值,但显示为“ Jan-19”

4 个答案:

答案 0 :(得分:2)

替换

alldata[i][10] = Utilities.formatDate(Day2, Session.getScriptTimeZone(), "MMM-YY");

作者

alldata[i][10] = "'" + Utilities.formatDate(Day2, ss.getSpreadsheetTimeZone(), "MMM-yy");

说明

  1. 使用撇号防止Google表格将MMM-YY格式的值解释为MMM-dd
  2. YY替换为yy
  3. Session.getScriptTimeZone()替换为ss.getSpreadsheetTimeZone()

注意

  1. YY表示弱年,可能会导致一年中某些日期出现一些错误。为防止这种情况,请改用yy
  2. Google表格和Google Apps脚本中用于日期格式的某些字母可能具有不同的含义。请参阅参考文献以正确使用它们。
  3. 脚本时区和电子表格时区可能不同。由于您会将这些值传递给电子表格,因此最好使用其时区,而不要使用脚本中的时区。

将日期显示为MMM-yy作为日期值而不是文本(字符串)值的解决方案,不需要使用Google Apps脚本,而是使用Google表格数字格式功能(点击格式>数字>更多格式>更多日期和时间格式),那么您可以使用Google Apps脚本通过使用setNumberFormat(numberFormat)

设置数字格式

参考

日期和数字格式

在Google表格中

Utilities.formatDate(date,timezone,format)

答案 1 :(得分:0)

这与MMM-yy

格式兼容
function myFunction1() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var ssh=ss.getSheetByName("Transactions");
  var tsh=ss.getSheetByName("stage");  
  var srg=ssh.getRange(1,1,ssh.getLastRow(),11);
  var data=srg.getValues();
  data.forEach(function(r,i){r[10]=Utilities.formatDate(new Date(data[i][0]),Session.getScriptTimeZone(), "MMM-yy");});
  var destination=tsh.getRange(1,1,data.length,11);
  destination.clear();
  destination.setValues(data);
}

reference

答案 2 :(得分:0)

您只需将日期值复制到目标表即可,而无需进行任何更改,并且将自定义数字格式应用于目标范围。

var datesRange = sheet.getRange("A1:A");
var values = datesRange.getValues();
var destination = targetSheet.getRange("A1:A");
destination.setValues(values).setNumberFormat("mmm-yy");

正如Ruben指出的那样,您只需在UI中更改数字格式(无需编写脚本),因此他的解决方案可能是最好的解决方案。

答案 3 :(得分:0)

感谢鲁宾,使用您的非脚本解决方案。