谷歌应用脚本日期格式问题(Utilities.formatDate)

8
我是一名新手使用Google Apps脚本,请见谅。
我正在Google表格上收集银行的日利率,并使用以下代码将包含在A5:F5中的利率附加到新行中,其中列A包含日期。
function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Interest Rates");
  var source = sheet.getRange("A5:F5");
  var values = source.getValues();
  values[0][0] = Utilities.formatDate(new Date(), "GMT+10:00", "yyyy-MM-dd");
  sheet.appendRow(values[0]);

};

我的问题是,尽管我已将日期格式指定为“yyyy-MM-dd”,但新行中列A中的日期以“M/dd/yyyy”格式创建。
我尝试使用Google Sheets中的下拉格式菜单预先格式化整个A列为“yyyy-MM-dd”,但如果我运行上面的代码,我的新行仍然是“M/dd/yyyy”。
就好像我的代码完全忽略了Utilities.formatDate一样。FYI,我从这里获得了上述代码。

已删除该部分,谢谢。 - sactyr
2个回答

14
Utilities.formatDate()工具可格式化JavaScript字符串。但是,当数据写入电子表格时,Google Sheets会根据数据类型和适当的格式确定新数据行的解释,就像您通过用户界面输入一样。由于您有一个可识别的日期字符串,Google Sheets将其视为日期,存储它,并应用默认的日期格式。有两个选项可使电子表格中的日期满足您的格式需求:1.即使看起来像是日期,也可以将其强制解释为字符串。
cell.setValue(Utilities.formatDate(new Date(), "GMT+10:00", "''yyyy-MM-dd"));
//                                                           ^^ force string literal
设置单元格的日期格式。这将使单元格的保持为日期格式,对于计算很有用。
日期格式遵循SimpleDateFormat规范。
// Cell A1 contains a date
var cell = SpreadsheetApp.getActiveSheet().getRange("A1");
cell.setNumberFormat('yyyy-mm-dd');

感谢您并为回复论坛的延迟道歉。我更喜欢第二种解决方案,但不幸的是它不起作用,我仍然会得到一个新行,其中日期以“代码”M/dd/yyyy“的形式显示。我已经使用更新的代码编辑了OP。 - sactyr
你没有根据解释和建议修改你的代码。当你调用appendRow时,新的ddTa被解释为日期。你需要在添加行之后调整格式。 - Mogsdad
1
是的,我一开始不明白何时插入代码,但现在没问题了,我在使用 getRange("A9:A") 与 appendRow 后插入了代码,这样就可以从 A9 单元格开始格式化 A 列,看起来它已经奏效了。谢谢 - sactyr

0

解决方案:

values[0][0] = Utilities.formatDate(new Date(), 
"GMT+10:00", "yyyy-MM-dd").setNumberFormat('yyyy-mm-dd');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接