我是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”
答案 0 :(得分:2)
替换
alldata[i][10] = Utilities.formatDate(Day2, Session.getScriptTimeZone(), "MMM-YY");
作者
alldata[i][10] = "'" + Utilities.formatDate(Day2, ss.getSpreadsheetTimeZone(), "MMM-yy");
说明
MMM-YY
格式的值解释为MMM-dd
YY
替换为yy
Session.getScriptTimeZone()
替换为ss.getSpreadsheetTimeZone()
注意
YY
表示弱年,可能会导致一年中某些日期出现一些错误。为防止这种情况,请改用yy
。将日期显示为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);
}
答案 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)
感谢鲁宾,使用您的非脚本解决方案。