Date 如何使用Google脚本处理从表单到电子表格的日期

Date 如何使用Google脚本处理从表单到电子表格的日期,date,google-apps-script,invalid-argument,Date,Google Apps Script,Invalid Argument,我有一个谷歌脚本,需要输入谷歌表单字段的日期,我想分别保存日期、月份和年份。特别是,我想将月号更改为文本,即03表示March。这就是我使用子字符串的原因 谷歌表单中的日期格式:dd/mm/yyyy 谷歌电子表格中的日期格式:d/mm/yyyyifday=10 关键在于: const cDay = e.namedValues['Date'][0].substring(0,2); var cMonth = e.namedValues['Date'][0].substring(3,5); con

我有一个谷歌脚本,需要输入谷歌表单字段的日期,我想分别保存日期、月份和年份。特别是,我想将月号更改为文本,即
03
表示
March
。这就是我使用
子字符串的原因

  • 谷歌表单中的日期格式:
    dd/mm/yyyy
  • 谷歌电子表格中的日期格式:
    d/mm/yyyy
    if
    day=10
关键在于:

const cDay = e.namedValues['Date'][0].substring(0,2);
var cMonth = e.namedValues['Date'][0].substring(3,5);
const cYear = e.namedValues['Date'][0].substring(6,10);
如果用户提交的日期少于10天,则代码被破坏

如果不更改Google电子表格文件的格式,我们如何解决这个问题?

我找不到使用
if
switch
语句的方法

更多解释 我尝试使用以下代码:

var cDay;
var cMonth;
var cYear;
if (e.namedValues['Date'][0].substring(1,2) == '/') { // Days are 1,..,9
  cDay = e.namedValues['Date'][0].substring(0,1);
  cMonth = changeMonth(e.namedValues['Date'][0].substring(2,4));
  cYear = e.namedValues['Date'][0].substring(5,9);
} else { // Days are 10,..,31
  cDay = e.namedValues['Date'][0].substring(0,2);
  cMonth = changeMonth(e.namedValues['Date'][0].substring(3,5));
  cYear = e.namedValues['Date'][0].substring(6,10);
}
功能<代码>更改月份<代码>:

function changeMonth(month) {
  switch (month) {
    case '01':
    case '1':
      cMonth = 'January';
      break;
    case '02':
    case '2':
      cMonth = 'February';
      break;
    case '03':
    case '3':
      cMonth = 'March';
      break;
    case '04':
    case '4':
      cMonth = 'April';
      break;
    case '05':
    case '5':
      cMonth = 'May';
      break;
    case '06':
    case '6':
      cMonth = 'June';
      break;
    case '07':
    case '7':
      cMonth = 'July';
      break;
    case '08':
    case '8':
      cMonth = 'August';
      break;
    case '09':
    case '9':
      cMonth = 'September';
      break;
    case '10':
      cMonth = 'October';
      break;
    case '11':
      cMonth = 'November';
      break;
    case '12':
      cMonth = 'December';
      break;
  }
}
当我使用
replaceText
时,似乎出现了错误:

body.replaceText('<<Day>>', cDay);
body.replaceText('<<Month>>', cMonth); // I get "Invalid argument: replacement"
body.replaceText('<<Year>>', cYear);
body.replaceText(“”,cDay);
正文.replaceText(“”,cm月);//我得到“无效参数:替换”
正文.替换文本(“”,cYear);
我发现一个解决方案是将
String(…)
添加到
replaceText
的参数中,因此我有:
body.replaceText(String(“”),String(cMonth))

但是,当我看到结果时,我得到了正确的日期和年份,但月份是未定义的。我们能做什么

例子
如果用户在表单上提交
03/05/2000
,则输出必须为:
您已在2000年5月3日提交表单。相反,我有
您在2000年未定义月份的3º天提交了表单

您可以使用JavaScript日期对象获取日期、月份和年份,而不是自己解析日期

注意:如果日期格式为dd/mm/yyyy,则此解决方案适用

试试这个:

function formSubmit(e) {
  var dateStr = e.namedValues["Date"][0];
  var dateArr = dateStr.split("/");
  var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
  var date = new Date(newDate);
  var day = date.getDate();
  var month = date.getMonth();
  var year = date.getFullYear();
  
  const monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
  ];

  Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
}
输出:

function formSubmit(e) {
  var dateStr = e.namedValues["Date"][0];
  var dateArr = dateStr.split("/");
  var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
  var date = new Date(newDate);
  var day = date.getDate();
  var month = date.getMonth();
  var year = date.getFullYear();
  
  const monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
  ];

  Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
}

参考资料:

function formSubmit(e) {
  var dateStr = e.namedValues["Date"][0];
  var dateArr = dateStr.split("/");
  var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
  var date = new Date(newDate);
  var day = date.getDate();
  var month = date.getMonth();
  var year = date.getFullYear();
  
  const monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
  ];

  Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
}

    • 您可以使用JavaScriptDate对象获取日期、月份和年份,而不是自己解析日期

      注意:如果日期格式为dd/mm/yyyy,则此解决方案适用

      试试这个:

      function formSubmit(e) {
        var dateStr = e.namedValues["Date"][0];
        var dateArr = dateStr.split("/");
        var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
        var date = new Date(newDate);
        var day = date.getDate();
        var month = date.getMonth();
        var year = date.getFullYear();
        
        const monthNames = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
        ];
      
        Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
      }
      
      输出:

      function formSubmit(e) {
        var dateStr = e.namedValues["Date"][0];
        var dateArr = dateStr.split("/");
        var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
        var date = new Date(newDate);
        var day = date.getDate();
        var month = date.getMonth();
        var year = date.getFullYear();
        
        const monthNames = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
        ];
      
        Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
      }
      

      参考资料:

      function formSubmit(e) {
        var dateStr = e.namedValues["Date"][0];
        var dateArr = dateStr.split("/");
        var newDate = dateArr[1]+"/"+dateArr[0]+"/"+dateArr[2];
        var date = new Date(newDate);
        var day = date.getDate();
        var month = date.getMonth();
        var year = date.getFullYear();
        
        const monthNames = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
        ];
      
        Logger.log("You have submitted the form on the "+day+"º day of the month of "+monthNames[month]+" of the year "+year)
      }
      

      如果您知道在谷歌表单中使用日期字段的日期、月份和年份的适当函数,请告诉我。那就简单多了。你可以用斜杠和parseInt()来拆分数组中的每个元素。如果你知道一个合适的函数,它在谷歌表单中表示日期字段的日期、月份和年份,请告诉我。这会简单得多。您可以使用正斜杠和parseInt()拆分数组的每个元素。谢谢!成功了。然而,我意识到表单中的格式是
      mm/dd/yyyy
      ,但我得到的格式是
      dd/mm/yyyy
      。我希望它是
      dd/mm/yyyy
      。如何解决这个问题?它是否会产生不正确的输出?选中Brock Harrison后,回答日期格式将链接到您个人资料的语言设置。因此,更改语言会更改日期格式。是的,它会产生不正确的输出,因为日期是月份,反之亦然。因此,月数组最多可以有31个插槽,这会导致异常。有没有办法不改变我的个人资料的语言设置而解决这个问题?最简单的解决办法是拆分日期字符串并交换日期和月份的位置。请看我的最新答案。谢谢!!它在一个示例表单上工作。我会尝试在真实的形式,但我怀疑它将是相同的输出。谢谢!成功了。然而,我意识到表单中的格式是
      mm/dd/yyyy
      ,但我得到的格式是
      dd/mm/yyyy
      。我希望它是
      dd/mm/yyyy
      。如何解决这个问题?它是否会产生不正确的输出?选中Brock Harrison后,回答日期格式将链接到您个人资料的语言设置。因此,更改语言会更改日期格式。是的,它会产生不正确的输出,因为日期是月份,反之亦然。因此,月数组最多可以有31个插槽,这会导致异常。有没有办法不改变我的个人资料的语言设置而解决这个问题?最简单的解决办法是拆分日期字符串并交换日期和月份的位置。请看我的最新答案。谢谢!!它在一个示例表单上工作。我将尝试真实的形式,但我怀疑它将是相同的输出。谢谢你的答案!!谢谢你的回答!!