问题描述
我有一列的格式为"-"mmm"-"yy
,例如13-May-18
。我是通过在Google表格中转到“格式”>“数字”>“更多格式”>“自定义数字格式”来确定的。
我尝试使用以下内容转换为YYYY-MM-DD。
ss.getRange(B2:B).setNumberFormat("YYYY-MM-DD");
但是它返回0218-05-13
而不是预期的2018-05-13
。
我也尝试了以下操作,但是它返回了相同的错误日期0218-05-13
。
var vals = ss.getRange(2,2,ss.getLastRow(),1).getValues();
for(var j = 0; j < vals.length; j++)
{
var newDate = Utilities.formatDate(new Date(vals[j][0]),"GMT","YYYY-MM-DD");
ss.getRange(j+2,1,1).setValue([[newDate]])
}
在同一张纸上,我还有另一个日期列,其格式为D-MMM-YY
,当我运行上面的代码以生成2018-05-13
时,它的行为与预期相同。
d"-"mmm"-"yy
格式的处理方式是什么? yy被解释为字符串吗? GAS如何提出02
放在最前面?
我的最佳选择是将其修复为仅遍历列中的每个值,获取最后两位数字,添加2000并使用该值替换最后两位数字并从那里重新格式化吗?
修改
vals[j][0]
的输出为Mon May 28 00:00:00 GMT-04:56 0218
。
此问题并非始终可以重现。从理论上讲,以下应该重现我的问题,但事实并非如此。
// create sheet
var newSheetID = SpreadsheetApp.create("example").getId();
var sh = SpreadsheetApp.openById(newSheetID).getSheetByName("Sheet1");
// set B1 to include problem date
ss.getRange("B1").setValue("28-May-18")
// format the range to the problematic format
ss.getRange("B1").setNumberFormat("d'-'mmm'-'yy")
// this reformats as expected 2018-05-28
ss.getRange("B1").setNumberFormat('yyyy-MM-dd');
该问题不会在相邻日期列中发生,也不会在确实发生该问题的列中的每个单元格中发生。
我确实找到了解决该问题的方法。我只需要先将值转换为字符串,然后转换为日期即可。
ss.getRange(2,1).setNumberFormat('@STRING@');
ss.getRange(2,1).setNumberFormat("yyyy-MM-dd");
我可以将其发布为答案,但了解为什么在如@TheMaster所述的新工作表中无法重现这一点可能会更有帮助。我不想发表我的工作表,但愿意研究任何人的想法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)