首页 > 解决方案 > 使用数组和映射方法将日期添加到日期数组

问题描述

我正在编写一个脚本,在该脚本中我试图使用数组和映射方法将 numdays 添加到谷歌表格中的数组中。

下图是数据示例 在此处输入图像描述

function new_date() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = ss.getMaxRows();
  
var data = ss.getRange(2, 5, lastRow).getValues();
  
// Logger.log(data)

var newData = data.map(adding_days);

ss.getRange(2, 5, lastRow).setValues(newData);
 
}

function adding_days(row){ 
  var millis_per_day = 1000 * 60 * 60 * 24;
  var days = 7 ; 
  
  var date = new Date(row[0]);
  var date2 = Utilities.formatDate(date, "GMT+05:30" , "MM-dd-yyyy");
  
  var numdays = days * millis_per_day
  
  return [ date2 + numdays ];  

}

当我运行代码时,它只以另一种格式再次返回数据,我不明白为什么它不能将 numdays 添加到数据中。我是在应用程序脚本中使用数组的新手,所以我对这里出了什么问题感到非常困惑。

提前致谢!

标签: javascriptdatetime

解决方案


将年、月、日、小时、分钟、秒和毫秒添加到日期

在这种特殊情况下,天数:

function new_date() {
  const ss=SpreadsheetApp.getActive()
  const sh=ss.getActiveSheet();
  const v=sh.getRange(2,5,sh.getLastRow()-1,1).getValues();
  const ndt=v.map(function(r,i){
    let dt=new Date(r[0]);
    let days=7;
    return [new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()+days,dt.getHours(),dt.getMinutes(),dt.getMilliseconds())];
  });
  sh.getRange(2,5,ndt.length,ndt[0].length).setValues(ndt);
}

以毫秒为单位添加日期值的问题在于它确实补偿了闰年等特殊情况。虽然这需要很长的一行,但它现在允许您通过简单的整数数学将天数和小时数等直接添加到日期,方法是将其添加到日期构造函数的适当部分。

日期构造函数


推荐阅读