Google Apps Script: Как получить текущую дату (сегодня)? Полное руководство

Google Apps Script предоставляет мощные инструменты для автоматизации задач в Google Workspace. Одним из фундаментальных аспектов автоматизации является работа с датами. Умение получать и форматировать текущую дату позволяет создавать скрипты, реагирующие на время, генерировать отчеты с временными метками и автоматизировать множество других процессов.

Зачем получать текущую дату в Google Apps Script?

Получение текущей даты в Google Apps Script необходимо для:

  • Логирования действий: Фиксация времени выполнения скрипта.
  • Создания отчетов: Добавление временных меток в отчеты и документы.
  • Автоматизации задач: Запуск скриптов в определенное время или с определенной периодичностью.
  • Фильтрации данных: Выбор данных за определенный период.
  • Именовании файлов: Создание файлов, в именах которых содержится текущая дата.

Обзор основных подходов к работе с датами

В Google Apps Script для работы с датами используется встроенный объект Date. Также можно использовать утилиты для форматирования даты и времени. Основные подходы включают:

  1. Создание объекта Date.
  2. Форматирование даты с помощью Utilities.formatDate().
  3. Учет часовых поясов.

Получение текущей даты с использованием объекта Date

Создание объекта Date для текущей даты и времени

Самый простой способ получить текущую дату и время — создать экземпляр объекта Date без параметров:

/**
 * @return {Date} Текущая дата и время.
 */
function getCurrentDate(): Date {
  return new Date();
}

const now: Date = getCurrentDate();
Logger.log(now); // Выведет текущую дату и время в формате GMT

Этот код создаст объект Date, содержащий текущую дату и время в часовом поясе сервера.

Преобразование объекта Date в строку (форматирование даты)

Объект Date по умолчанию выводится в формате GMT. Чтобы представить дату в более удобном для чтения формате, необходимо её отформатировать. Вот пример использования метода toLocaleDateString():

/**
 * Форматирует дату в строку с учетом локали.
 * @param {Date} date Объект Date.
 * @return {string} Отформатированная дата.
 */
function formatDateToString(date: Date): string {
  return date.toLocaleDateString();
}

const formattedDate: string = formatDateToString(new Date());
Logger.log(formattedDate); // Выведет дату в формате MM/DD/YYYY (зависит от локали)

Работа с часовыми поясами при получении текущей даты

Важно учитывать часовой пояс, особенно если скрипт используется людьми в разных регионах. Google Apps Script по умолчанию использует часовой пояс сервера. Чтобы получить дату и время в определенном часовом поясе, используйте Utilities.formatDate().

/**
 * Получает текущую дату в указанном часовом поясе.
 * @param {string} timeZone Часовой пояс.
 * @return {string} Отформатированная дата в указанном часовом поясе.
 */
function getCurrentDateInTimeZone(timeZone: string): string {
  const now: Date = new Date();
  return Utilities.formatDate(now, timeZone, 'yyyy-MM-dd HH:mm:ss');
}

const timeZone: string = 'Europe/Moscow';
const currentDateInMoscow: string = getCurrentDateInTimeZone(timeZone);
Logger.log(currentDateInMoscow);

Альтернативные способы получения текущей даты

Использование Utilities.formatDate() для форматирования

Функция Utilities.formatDate() предоставляет гибкие возможности для форматирования даты и времени. Она принимает объект Date, часовой пояс и строку формата.

Реклама
/**
 * Форматирует дату с использованием Utilities.formatDate().
 * @param {Date} date Объект Date.
 * @param {string} timeZone Часовой пояс.
 * @param {string} formatPattern Шаблон формата.
 * @return {string} Отформатированная дата.
 */
function formatDate(date: Date, timeZone: string, formatPattern: string): string {
  return Utilities.formatDate(date, timeZone, formatPattern);
}

const now: Date = new Date();
const formattedDate: string = formatDate(now, 'GMT', 'yyyy-MM-dd');
Logger.log(formattedDate); // Выведет дату в формате YYYY-MM-DD

Получение даты в определенном формате (год-месяц-день)

Для получения даты в формате год-месяц-день (YYYY-MM-DD) можно использовать следующий код:

/**
 * Получает текущую дату в формате YYYY-MM-DD.
 * @return {string} Дата в формате YYYY-MM-DD.
 */
function getCurrentDateYYYYMMDD(): string {
  const now: Date = new Date();
  return Utilities.formatDate(now, Session.getTimeZone(), 'yyyy-MM-dd');
}

const currentDate: string = getCurrentDateYYYYMMDD();
Logger.log(currentDate);

Здесь используется Session.getTimeZone() для получения часового пояса пользователя, что делает скрипт более универсальным.

Практические примеры использования текущей даты

Автоматическая запись даты в Google Sheet

/**
 * Записывает текущую дату в ячейку Google Sheet.
 */
function writeDateToSheet() {
  const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
  const now: Date = new Date();
  sheet.appendRow([now]);
}

Создание файлов с именем, включающим текущую дату

/**
 * Создает файл Google Doc с именем, включающим текущую дату.
 */
function createDocumentWithDate() {
  const now: Date = new Date();
  const formattedDate: string = Utilities.formatDate(now, Session.getTimeZone(), 'yyyy-MM-dd');
  const fileName: string = `Отчет_${formattedDate}`;
  DocumentApp.create(fileName);
}

Этот пример демонстрирует создание нового Google Документа с именем, содержащим текущую дату. Это полезно для автоматического создания отчетов.

Использование текущей даты для фильтрации данных

Предположим, у вас есть Google Sheet с данными о продажах, и вам нужно отфильтровать данные за последние 7 дней:

/**
 * Фильтрует данные в Google Sheet за последние 7 дней.
 */
function filterDataLast7Days() {
  const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
  const lastRow: number = sheet.getLastRow();
  const dateColumn: number = 1; // Предположим, даты находятся в первом столбце

  const today: Date = new Date();
  const sevenDaysAgo: Date = new Date(today.setDate(today.getDate() - 7));

  for (let i: number = 2; i <= lastRow; i++) { // Начинаем со второй строки (предполагаем, что первая строка - заголовки)
    const cell: GoogleAppsScript.Spreadsheet.Range = sheet.getRange(i, dateColumn);
    const cellDate: Date = new Date(cell.getValue());

    if (cellDate < sevenDaysAgo) {
      sheet.hideRows(i); // Скрываем строки, дата которых раньше 7 дней назад
    }
  }
}

Распространенные ошибки и способы их решения

Неправильное форматирование даты

Убедитесь, что строка формата соответствует ожидаемому результату. Используйте документацию по Utilities.formatDate() для корректной настройки формата.

Проблемы с часовыми поясами

Всегда учитывайте часовой пояс. Используйте Session.getTimeZone() для получения текущего часового пояса пользователя или явно указывайте часовой пояс с помощью Utilities.formatDate().

Ошибки при сравнении дат

При сравнении дат убедитесь, что сравниваете объекты Date, а не строки. Используйте методы getTime() для сравнения дат как числовые значения.

Например, чтобы проверить, является ли дата date1 раньше даты date2:

if (date1.getTime() < date2.getTime()) {
  // date1 раньше date2
}

Добавить комментарий