Функция СЕЙЧАС () + Настройка часового пояса (Google Sheets) - PullRequest
1 голос
/ 27 октября 2019

Я живу в Бразилии (смещение UTC - 3:00), и здесь у нас есть то, что называется летним временем, когда в некоторые времена года часы переводятся на 1 час.

Что происходит, так эточто у меня есть целая электронная таблица, готовая для фильтрации данных во временном поясе Англии.

У меня была большая проблема сегодня, потому что времена Google изменились, и мои данные были отфильтрованы неправильно.

Мойоригинальная формула в сценарии была:

spreadsheet.getCurrentCell().setFormula('=text(now()+"5:00","yyyy/mm/dd hh:mm")');

И теперь, спустя много часов, я осознал ошибку и мне нужно было переключиться на:

spreadsheet.getCurrentCell().setFormula('=text(now()+"4:00","yyyy/mm/dd hh:mm")');

Чтобы этого больше не происходило, я хотел бы знать, как добавить часовой пояс Англии в функцию NOW ().

Я пытался:

spreadsheet.getCurrentCell().setFormula('=text(now("UK"),"yyyy/mm/dd hh:mm")');

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

Подробно: я мог бы изменить время в настройках электронной таблицы, но мне нужносохранено по местному времени.

1 Ответ

2 голосов
/ 27 октября 2019
  • Вы хотите использовать другой часовой пояс без изменения местного часового пояса электронной таблицы.
  • Вы хотите поместить время, преобразованное в другой часовой пояс, в электронную таблицу в виде текста.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание правильное, как насчет этого ответа?

Проблема и обходное решение:

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

Пример сценария:

Пример сценария выглядит следующим образом.

function NOW2(timeZone, format) {
  return Utilities.formatDate(new Date(), timeZone, format);
}

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getCurrentCell().setFormula('=NOW2("Europe/London", "yyyy/mm/dd hh:mm")');
}
  • NOW2() используется как пользовательская функция. В примере сценария, когда запускается myFunction(), =NOW2("Europe/London", "yyyy/mm/dd hh:mm") помещается в текущую ячейку. Таким образом, текущее время устанавливается путем преобразования часового пояса в Europe/London в формате yyyy/mm/dd hh:mm.

Примечание:

  • Если вы хотитечтобы обновить пользовательскую функцию =NOW2("Europe/London", "yyyy/mm/dd hh:mm") при открытии электронной таблицы, используйте следующий скрипт в качестве простого триггера.

    function onOpen(e) {
      e.source.createTextFinder("=NOW2").matchFormulaText(true).replaceAllWith("temp");
      e.source.createTextFinder("temp").matchFormulaText(true).replaceAllWith("=NOW2");
    }
    
  • Если вы хотите использовать выше, используя time-управляемый триггер, пожалуйста, используйте следующий скрипт. В этом случае текущее общее время выполнения триггеров и текущее время выполнения пользовательской функции составляют 90 минут / день и 30 секунд / выполнение соответственно. Ref Пожалуйста, будьте осторожны с этим.

    function myFunction() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      ss.createTextFinder("=NOW2").matchFormulaText(true).replaceAllWith("temp");
      ss.createTextFinder("temp").matchFormulaText(true).replaceAllWith("=NOW2");
    }
    

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я прошу прощения.

...