Google Forms createResponse с датой уменьшает день на 1 - PullRequest
0 голосов
/ 07 июня 2019

Я программно генерирую новые ответы форм из строк данных в Google Sheet (одна система рабочих процессов утверждения генерирует новые запросы на утверждение во второй системе рабочих процессов утверждения). Данные включают даты. Мой скрипт берет значение даты как строку из ячейки, преобразует ее в собственный объект даты JavaScript, а затем отправляет это в новый ответ формы с помощью createResponse (). Вот соответствующий код:

var startDate = googleFormsDateStringToDate(eventDetails['Event Start Date']);
var r = item.createResponse(startDate);

По большей части система работает надежно. За исключением одной интригующей проблемы - для любой даты после 29/04/2020 дата, сохраненная в ответе, уменьшается на 1 день. Любая дата в или до этой даты работает как положено, любая дата после уменьшается на день.

Я пробовал несколько вещей.

Даты соответствуют дате начала и дате окончания события. Если дата начала предшествует этой дате, а дата окончания - позже, дата окончания будет уменьшаться, в то время как дата начала записывается точно. Поэтому я уверен, что проблема напрямую связана с тем, относится ли дата, которую я представляю, к или после этой даты.

Я много тестировал и абсолютно уверен, что преобразование строки в дату работает. Если я сразу получу значение ответа после его создания (даже до того, как ответ формы будет отправлен), я обнаружу, что оно было уменьшено:

var startDate = dateStringToDate(eventDetails['Event Start Date']);
Logger.log(startDate.toString()); // startDate is always accurate
var r = item.createResponse(startDate);
Logger.log(r.getResponse()); // if after 29/04/2020, will be decremented by 1 day

Это говорит мне, что проблема возникает именно тогда, когда я создаю ответ, и что она возникает "в конце Google".

Одно из моих подозрений заключается в том, что это может быть проблема часового пояса, но это не объясняет, почему проблема связана непосредственно с этой конкретной датой. Мое другое подозрение заключается в том, что это может быть связано с тем фактом, что 2020 год является високосным, поэтому мы получаем 29/02/2020, а дата, после которой возникает ошибка, - 29/03/2020. Возможно, где-то за реализацией Google createResponse не учитывается високосный год?

Пока я не смогу идентифицировать ошибку, я планирую применить обходной путь, при котором я буду использовать getResponse (), чтобы проверить, соответствует ли дата ответа предполагаемой дате и исправить соответствующим образом. Но я бы предпочел понять, что является причиной ошибки (поэтому я знаю, является ли это ошибкой, требующей сообщения или просто моим отсутствием понимания), и, если возможно, найти решение.

Итак, конкретные вопросы: каков источник ошибки? Есть ли решение (а не обходной путь)?

EDIT Обдумывая обходной путь, я ответил на мой первый вопрос. В Великобритании переход на летнее время начинается 29.04.2020. Поскольку даты, введенные с помощью формы Google, не имеют времени, связанного с ними, время сохраняется как 00:00:00 или полночь. Я предполагаю, что происходит то, что поправка на летнее время (1 час) вычитает час с этого времени, тем самым возвращая его к предыдущему дню.

Мой последний вопрос: есть ли способ надежно предотвратить возникновение этой ошибки, а не проверять вручную неточные даты (или программировать даты перехода на летнее время)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...