【问题标题】:Google Apps Script date format issue (Utilities.formatDate)Google Apps 脚本日期格式问题 (Utilities.formatDate)
【发布时间】:2015-05-11 11:12:01
【问题描述】:

我对 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 获得了上述代码。

【问题讨论】:

  • 删除了那部分,干杯

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


【解决方案1】:

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

由于您有一个可识别的日期字符串,Google 表格会确定它是一个日期,并按原样存储它,并应用默认日期格式。

您有两个选项可以让电子表格中的日期满足您的格式要求。

  1. 强制将其解释为字符串,即使它看起来确实像日期。

    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');
    

【讨论】:

  • 感谢您并为延迟返回论坛表示歉意。我更喜欢第二种解决方案,但不幸的是它不起作用,我仍然得到一个新的行,日期格式为“代码“M/dd/yyyy”。我已经用更新的代码编辑了 OP。
  • 您没有根据解释和建议更改代码。当您调用 appendRow 时,新的 ddTa 被解释为日期。添加行后,您需要调整格式。
  • 是的,我不明白何时插入代码 - 但现在一切都好,我在 appenRow 之后使用 getRange("A9:A") 插入了代码,以便它格式化从单元格 A9 开始的 A 列,它似乎可以解决问题。谢谢
【解决方案2】:

解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多