将日期格式从d“-” mmm“-” yy转换为“ YYYY-MM-DD”会输出无效的年份

问题描述

我有一列的格式为"-"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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...