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
ifday=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个插槽,这会导致异常。有没有办法不改变我的个人资料的语言设置而解决这个问题?最简单的解决办法是拆分日期字符串并交换日期和月份的位置。请看我的最新答案。谢谢!!它在一个示例表单上工作。我将尝试真实的形式,但我怀疑它将是相同的输出。谢谢你的答案!!谢谢你的回答!!