Google脚本中的基本日期操作


11

我想在Google表格中定义一个自定义函数。这个函数应该做的很简单,但是我还没有找到如何做的方法。我对阅读的所有答案都感到非常困惑,因为我找不到关于在Google脚本中处理日期的明确参考。

据我了解,基本的日期操作可以通过以下方式完成:

  • new Date():据我了解,它定义了一个具有一些属性的对象。我不知道如何使用单元格的日期并将其转换为这样的对象。
  • Utilities.formatDate():这是为了更改日期格式,将其视为字符串
  • Momenthttp://momentjs.com/

最后,如何输入两个日期(例如31/01/2016),并找出两个日期之间的最大值并提取第一个日期的月份?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

我也很感兴趣有人是否可以解释处理日期的概述,或指出一个很好的参考。



谢谢。有没有其他办法?提取日期似乎非常复杂,例如日期的月份!另外,它还必须考虑时区...对于简单的(固定)日期操作而言,这有点扭曲。
anderstood

我添加了一个针对公开的案例代码的答案,但问题是两个广义的(日期操纵)。也许您应该先查找JavaScript代码段和在线课程。
鲁本

@Rubén我明白。我不想问“为我编写代码”的问题,因此我正在寻找我并未真正找到的一般信息。您指出的Sergei insas的帖子很有帮助。
anderstood

关于JavaScript的一般信息,请参阅developer.mozilla.org/en-US/docs/Web/JavaScript,有关Google Apps脚本的信息请参见developers.google.com/apps-script
鲁本

Answers:


14

获取和设置日期时间值

每当脚本调用.getValue()格式为日期,日期时间或持续时间的单元格时,它将获取一个JavaScript Date对象。然后,您可以将该MDN页面上列出的各种方法应用于该对象,包括getMonth()月份。例:

  var sheet = SpreadsheetApp.getActiveSheet();
  var value = sheet.getRange('A1').getValue();  // is a Date object
  Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); 
  // examples of available methods

相反,您可以使用来将Date对象分配给单元格setValue,该对象将被自动格式化。

  sheet.getRange('B2').setValue(new Date());  // current timestamp

时区

Google表格中的时间戳位于本地时区,可通过“文件”>“电子表格”设置进行设置。该脚本还在时区中运行,该时区可能有所不同,可以在脚本编辑器的“文件”>“项目”属性下找到。如果这些时区不同意,则时间戳会出现问题。

要检查时区是否一致,可以手动比较两个时区,也可以执行以下操作:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

这将=date(2015,1,1)在单元格A1中输入公式。结果将是电子表格的时区为2015-01-01 00:00:00。然后,脚本获取日期并提取脚本本地时间中的小时数。如果时区一致,则您应该在日志中看到0.0。


4

简短答案

下面提供了两个自定义函数,以作为Google表格和Google Apps脚本如何处理日期的示例。

示例1:获取最新日期

获取最新日期

function myFunction(date1,date2) {
  return new Date(Math.max(date1,date2)) 
}

示例2:获取最新日期的月份

function myFunction2(date1,date2) {
  var date = new Date(Math.max(date1,date2));
  return date.getMonth();
}

简要说明

在第一个示例中,Math.max JavaScript方法完成了这项工作。

如果命令获取日期作为结果,则使用new Date()创建日期对象。

在第二个示例中,将日期对象分配给变量,然后使用getMonth() JavaScript方法获取月份索引。请记住,JavaScript 0用于起始元素0,一月,1二月等等。

参考文献


一)这些date1date254243):为数字(通常通过呢?ⅱ)我现在试图提取的月date2使用date2.getMonth(),但是当所述细胞是01/12/2015它用于返回图10和11 02/12/2015。我猜是因为时区。工作表功能month()非常简单。
anderstood

Google表格将日期作为与JavaScript相同的序列号处理,但每个日期都有不同的开始日期。因此,如果要使用JavaScript日期函数,首先应将电子表格日期转换为JavaScript日期。正如您已经注意到的,更简单的方法是使用电子表格函数来处理电子表格日期,并使用JavaScript函数来处理JavaScript日期。
鲁本

@anderstood:我添加了第二个示例。
鲁本

再次感谢你。关于第二个示例,正如我所写的,当max为01/12/2015时myfunction2返回10,而max为02/12/2015时返回11。虽然我对11表示满意,但我不明白为什么在2015年1月12日返回10。正如我所说,我相信这是由于格林尼治标准时间造成的,但我不确定。我想念什么吗?
anderstood

@anderstood:创建一个演示spredsheet,与仅具有查看链接的任何人共享,并发布一个新问题,包括演示电子表格的链接。
鲁本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.