У меня есть скрипт Google, который вводит дату в поле формы Google, и я хочу сохранить день, месяц и год отдельно. В частности, я хочу изменить номер месяца на текст, т.е. 03
означает March
. Вот почему я использую substring
.
- Формат даты в Google Forms:
dd/mm/yyyy
. - Формат даты в таблицах Google:
d/mm/yyyy
, еслиday<10
, иdd/mm/yyyy
, если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 Spreadsheets?
Я не мог найти способ использовать инструкции 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);
}
Функция changeMonth
:
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);
Я обнаружил, что решение состоит в том, чтобы добавить String(...)
к параметрам replaceText
, так что у меня есть: body.replaceText(String('<<Month>>'), String(cMonth));
.
Однако, когда я вижу результаты, я получаю правильный день и год, но месяц undefined
. Что мы можем сделать?
Пример
Если пользователь отправляет 03/05/2000
в формы, вывод должен быть: You have submitted the form on the 3º day of the month of May of the year 2000
. Вместо этого у меня You have submitted the form on the 3º day of the month of undefined of the year 2000
.