Вопрос по – Нечетная проблема изменения даты в выводе скрипта

0

Мой коллега написал сценарий Google Apps для автоматизации рабочего процесса (утверждение запросов на размещение номеров в отеле). Сценарий, по большому счету, похоже, функционирует, как и ожидалось. В скрипте есть функция, которая запускается по автоматическому расписанию (на основе времени, а не на основе событий). Было несколько случаев, когда дата регистрации была отменена на один, что приводило к ошибке бронирования. К сожалению, это происходит не для всех запросов. Все соответствующие пользователи, делающие запросы, находятся в одном часовом поясе (EST).

Например, я видел случаи, когда запрос был представлен с датой регистрации 10/22 и датой регистрации 10/23, но когда сценарий запускается, и отправитель получает уведомление об утверждении регистрации дата перенесена на 10/21 и выезд на 10/22.

Соответствующая часть электронного письма HTML просто извлекает значения из строки электронной таблицы:       + & quot;

& Quot; + & quot; Est Check In Date: & quot; + Utilities.formatDate (row.arrivalDate, "EST", "MM-dd-yyyy")       + & quot;

& Quot; + & quot; Est Check Out Date: & quot; + Utilities.formatDate (row.departureDate, "EST", "MM-dd-yyyy")

Что может вызвать такое поведение? Может ли это быть из-за времени на данном сервере Google, где выполняется код?

Извините за очевидное, но вы проверили настройки часового пояса Spreadsheet и Script? (по одному для каждого) Henrique G. Abreu

Ваш Ответ

3   ответа
2

File > Spreadsheet settings и часовой пояс проекта сценария (расположен вFile > Project properties) оба установлены правильно. Часовой пояс электронной таблицы контролирует, как значения даты / времени считываются из ячеек, а часовой пояс скрипта контролирует значения по умолчанию для новых объектов Date, триггеров и т. Д.

1

это может быть результатом путаницы между EST и EDT, особенно если данные были представлены в период перехода. Позвольте мне привести пример: предположим, что мы находимся в зимнее время (EDT), и что один отправляет запрос на дату в EST: если ваш сценарий заставляет дату быть EST, дата EDT будет неправильно понята. В зависимости от того, как вы установите часы, это может привести к дневной смене. То, что я сделал, решило проблему радикально - учел текущее летнее / зимнее время при использовании Utilities.formatDate (). Вот фрагмент кода, который я использую, может быть, вы можете попробовать его: (Я в Европе, поэтому значения разные, но принцип тот же)

  var FUS1=new Date().toString().substr(25,8);// FUS1 gets the GMT+0200 or GMT+0100 string
// Fri Sep 24 2010 10:00:00 GMT+0200 (CEST) for example
  if (FUS1!="GMT+0200"){FUS1="GMT+0100"};// and takes care of summer time !
  var today=Utilities.formatDate(new Date(),FUS1,"dd-MM-yyyy")+" à "+Utilities.formatDate(new Date(),FUS1,"HH:mm")

для полного описания вы можете посмотреть наЭта проблема Я давно поднял, что не было проблемой ;-)

1

но моя была от ввода даты в форме в формате MM / dd / yyy. При получении даты из таблицы для публикации по электронной почте она всегда была на один день меньше.

Я по восточному времени (GMT-5: 00). Я убедился, что это правильно в свойствах моего проекта и в настройке электронной таблицы. После более глубокого изучения я понял, что хотя дата, введенная в форму и отображенная в электронной таблице, была 27.07.2012, реальная дата в электронной таблице была следующей:

Чт 26 июля 21:00:00 PDT 2012

Это сделало "некоторые" смысл, так как 27/07/2012 00:00:00 по восточному времени (GMT-5: 00) будет днем раньше в ФДТ на три часа. Я просто отформатировал дату по Гринвичу. Я мог бы отформатировать его в EDT, и он должен был бы всегда работать, но жесткое кодирование его по Гринвичу более или менее требовало догадки кого-то другого, читающего код, если код нужно будет менять по мере смены сезонов. Мне нужна была только дата.

Я скопировал и вставил пример FUS1 в этом посте (пока что в качестве комментариев) как более «красноречивый». способ решения проблемы. Спасибо!

Похожие вопросы