You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用Google Apps Script将日期格式从mm/dd/yyyy转为dd/mm/yyyy

问题描述

我是JavaScript新手,正尝试通过脚本自动化工作。目前遇到问题:表格中日期格式为mm/dd/yyyy,需编写脚本将其转换为dd/mm/yyyy格式。已编写如下convertColumns函数,目标处理J2:L10000区域:

function convertColumns() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("J2:L10000");
  var values = range.getValues();
  var newValues = [];
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    newValues.push([row[0], row[1], row[2].replace(/\//g, "-")]);
  }
  range.setValues(newValues);
}

现寻求正确实现该日期格式转换的方法。

解决方法

你当前的代码仅替换了日期字符串的分隔符,没有实现mm/dd/yyyy到dd/mm/yyyy的格式转换。以下是两种适配不同存储场景的可行方案:

方案一:处理文本格式日期

如果表格中的日期是以纯文本形式存储(非Google Sheets内置日期对象),可通过拆分字符串重新拼接完成转换:

function convertColumns() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("J2:L10000");
  var values = range.getValues();
  var newValues = [];

  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    var dateStr = row[2];
    var convertedDate = dateStr;

    // 仅处理合法的mm/dd/yyyy格式文本
    if (dateStr && typeof dateStr === 'string') {
      var parts = dateStr.split('/');
      if (parts.length === 3) {
        convertedDate = `${parts[1]}/${parts[0]}/${parts[2]}`;
      }
    }

    newValues.push([row[0], row[1], convertedDate]);
  }

  range.setValues(newValues);
}

方案二:处理Google Sheets日期对象

如果表格中的日期是内置日期对象(非纯文本),需先提取日期分量再格式化:

function convertColumns() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("J2:L10000");
  var values = range.getValues();
  var newValues = [];

  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    var date = row[2];
    var convertedDate = date;

    if (date instanceof Date && !isNaN(date)) {
      // 补零保证两位数格式,注意月份是0起始需加1
      var day = String(date.getDate()).padStart(2, '0');
      var month = String(date.getMonth() + 1).padStart(2, '0');
      var year = date.getFullYear();
      convertedDate = `${day}/${month}/${year}`;
    } else if (date && typeof date === 'string') {
      // 兼容文本格式的日期
      var parts = date.split('/');
      if (parts.length === 3) {
        convertedDate = `${parts[1]}/${parts[0]}/${parts[2]}`;
      }
    }

    newValues.push([row[0], row[1], convertedDate]);
  }

  range.setValues(newValues);
}

额外技巧

如果仅需修改日期显示格式而非单元格实际值,直接设置数字格式更高效:

function setDateFormat() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("J2:L10000");
  // 直接设置单元格显示格式为dd/mm/yyyy
  range.setNumberFormat("dd/mm/yyyy");
}

内容的提问来源于stack exchange,提问作者Empyrean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:52:51