Google apps script 函数的作用是:为特定月份(仅9月、10月)创建无效日期

Google apps script 函数的作用是:为特定月份(仅9月、10月)创建无效日期,google-apps-script,Google Apps Script,我正在谷歌应用程序脚本中处理日期字符串。我正在将字符串转换为日期对象,但在处理特定日期时遇到困难 下面的代码为8月、9月、10月和11月创建4个日期,并使用new Date()将它们转换为日期 但是,正如下面我的调试器所示,9月(08日)和10月(09日)的日期无效 我已尝试更改new Date()的所有其他参数的数字,但只有月份和输入08和09会创建无效日期 如何解决此问题?谷歌应用程序脚本在parseInt(“08”)和parseInt(“09”)中有一个奇怪的错误,您可以通过指定pars

我正在谷歌应用程序脚本中处理日期字符串。我正在将字符串转换为日期对象,但在处理特定日期时遇到困难

下面的代码为8月、9月、10月和11月创建4个日期,并使用new Date()将它们转换为日期

但是,正如下面我的调试器所示,9月(08日)和10月(09日)的日期无效

我已尝试更改new Date()的所有其他参数的数字,但只有月份和输入08和09会创建无效日期


如何解决此问题?

谷歌应用程序脚本在parseInt(“08”)和parseInt(“09”)中有一个奇怪的错误,您可以通过指定parseInt使用小数来解决它,例如parseInt(“08”,10):


该月的参数以零为基础。在您的日志中,第一个固定日期为“八月”,月号为07。你必须从所有月数中减去1。然而,这可能不是“无效日期”的修复方法。您应该分离出
date.slice(x,x)
参数,并使用
Logger.log()
记录它们,以查看那里发生了什么。重复:您根本不需要使用parseInt,只需传递字符串值即可。如果,则它们将被转换为数字,就像通过
number(value)
一样。对于月份,使用
date.slice(5,7)-1
,因为月份编号必须递减,减号运算符将强制字符串为数字。这不是真正的错误。在旧的实现中,parseInt将以
0
开头的数字文本视为八进制,其中不提供基数。简单的解决方案是不使用parseInt,只需传递字符串,并记住从月份中减去1。:)
function myFunction() {
  var date1 = "2016-07-18T13:44:00.000+0000";    
  var date2 = "2016-08-01T13:44:00.000+0000";      
  var date3 = "2016-09-01T13:44:00.000+0000";      
  var date4 = "2016-10-01T13:44:00.000+0000";

  var fizedDate1 = dateFix(date1);      
  var fizedDate2 = dateFix(date2);    
  var fizedDate3 = dateFix(date3);    
  var fizedDate4 = dateFix(date4);

  return 0;
}

function dateFix(date){
  var fixedDate = new Date(date.slice(0,4),parseInt(date.slice(5,7)),date.slice(8,10),parseInt(date.slice(11,13)),date.slice(14,16),date.slice(17,19));
  return fixedDate;
}
function myFunction() {
  var date1 = "2016-07-18T13:44:00.000+0000";    
  var date2 = "2016-08-01T13:44:00.000+0000";      
  var date3 = "2016-09-01T13:44:00.000+0000";      
  var date4 = "2016-10-01T13:44:00.000+0000";

  var fizedDate1 = dateFix(date1);      
  var fizedDate2 = dateFix(date2);    
  var fizedDate3 = dateFix(date3);    
  var fizedDate4 = dateFix(date4);

  return 0;
}

function dateFix(date){
  var fixedDate = new Date(date.slice(0,4),parseInt(date.slice(5,7),10),date.slice(8,10),parseInt(date.slice(11,13),10),date.slice(14,16),date.slice(17,19));
  return fixedDate;
}