Google Apps脚本日期格式问题(Utilities.formatDate)

时间:2015-03-10 05:06:17

标签: date google-apps-script format google-sheets

我是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表格中的下拉格式菜单预先格式化整个列A“yyyy-MM-dd”,但如果我运行上面的代码,我的新行仍然是“M / dd / yyyy”

就好像我的代码完全忽略了Utilities.formatDate。仅供参考我从here获得了上述代码。

2 个答案:

答案 0 :(得分:10)

Utilities.formatDate()实用程序格式化javascript字符串。但是,当写入电子表格时,Google表格会解释新的数据行,以确定数据类型和适当的格式,就像您通过用户界面输入一样。

由于您有一个可识别的日期字符串,Google表格决定它是一个日期,将其存储,并应用默认日期格式。

您可以通过两种方式让电子表格中的日期符合您的格式需求。

  1. 强制将其解释为String,即使它看起来像日期。

    cell.setValue(Utilities.formatDate(new Date(), "GMT+10:00", "''yyyy-MM-dd"));
    //                                                           ^^ force string literal
    
  2. 设置单元格的日期格式。这会将单元格的保留为日期,这对计算很有用。

    日期格式遵循SimpleDateFormat规范。

    // Cell A1 contains a date
    var cell = SpreadsheetApp.getActiveSheet().getRange("A1");
    cell.setNumberFormat('yyyy-mm-dd');
    

答案 1 :(得分:1)

解决方案:

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