Google Apps Script: Как получить текущую дату?

Обзор Google Apps Script и его возможностей работы с датами

Google Apps Script – это облачный язык сценариев, который позволяет автоматизировать задачи в Google Workspace, такие как Google Sheets, Docs, Forms и другие. Одним из фундаментальных аспектов автоматизации является работа с датами. Google Apps Script предоставляет различные способы получения, форматирования и манипулирования датами, что критически важно для многих сценариев.

Зачем получать текущую дату в Google Apps Script: примеры использования

Получение текущей даты необходимо во множестве случаев:

Автоматическая простановка меток времени: Например, при записи данных в Google Sheets.

Планирование и создание уведомлений: Отправка уведомлений по электронной почте в определенные дни.

Создание отчетов: Формирование отчетов с указанием даты их создания.

Анализ данных за определенный период: Выборка данных из Google Analytics или рекламных платформ за текущий месяц.

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

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

Самый простой способ получить текущую дату и время – использовать конструктор Date():

/**
 * Получает текущую дату и время.
 * @return {Date} Объект Date с текущей датой и временем.
 */
function getCurrentDateTime(): Date {
  return new Date();
}

let now: Date = getCurrentDateTime();
Logger.log(now); // Выводит текущую дату и время в лог.

Получение текущей даты в определенной временной зоне (TimeZone)

Для работы с датами в определенной временной зоне используется Utilities.formatDate():

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

let moscowTime: string = getCurrentDateTimeInTimeZone('GMT+3');
Logger.log(moscowTime); // Выводит текущую дату и время в московском времени.

Разница между `new Date()` и `Utilities.formatDate()`

new Date(): Создает объект Date, представляющий текущую дату и время в UTC.

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

Форматирование даты и времени в Google Apps Script

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

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

Настройка формата даты: шаблоны форматирования

Шаблоны форматирования определяют, как будет выглядеть дата. Вот некоторые распространенные шаблоны:

yyyy: год (четыре цифры)

MM: месяц (две цифры)

dd: день (две цифры)

HH: час (24-часовой формат)

mm: минута

ss: секунда

Примеры форматирования даты для различных целей (отчеты, логи и т.д.)

/**
 * Форматирует дату для отчета.
 * @param {Date} date Объект Date для форматирования.
 * @return {string} Отформатированная строка даты.
 */
function formatDateForReport(date: Date): string {
  return Utilities.formatDate(date, Session.getTimeZone(), "dd.MM.yyyy");
}

/**
 * Форматирует дату и время для логов.
 * @param {Date} date Объект Date для форматирования.
 * @return {string} Отформатированная строка даты и времени.
 */
function formatDateTimeForLog(date: Date): string {
  return Utilities.formatDate(date, Session.getTimeZone(), "yyyy-MM-dd HH:mm:ss z");
}

let today: Date = new Date();
let reportDate: string = formatDateForReport(today);
let logTimestamp: string = formatDateTimeForLog(today);

Logger.log("Дата для отчета: " + reportDate);
Logger.log("Метка времени для лога: " + logTimestamp);
Реклама

Работа с датами: продвинутые техники

Добавление и вычитание дней, месяцев, лет из текущей даты

Для добавления или вычитания дней можно использовать методы объекта Date. Важно помнить, что методы setDate, setMonth, setFullYear изменяют дату «на месте» и могут привести к неожиданным результатам при неправильном использовании.

/**
 * Добавляет указанное количество дней к дате.
 * @param {Date} date Исходная дата.
 * @param {number} days Количество дней для добавления.
 * @return {Date} Новая дата с добавленными днями.
 */
function addDays(date: Date, days: number): Date {
  let result: Date = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

let tomorrow: Date = addDays(new Date(), 1);
Logger.log("Завтра: " + tomorrow);

Получение номера дня недели, месяца, года

Для получения номера дня недели, месяца или года используются методы объекта Date:

getDay(): Возвращает номер дня недели (0 — воскресенье, 6 — суббота).

getMonth(): Возвращает номер месяца (0 — январь, 11 — декабрь).

getFullYear(): Возвращает год (четыре цифры).

Сравнение дат в Google Apps Script

Для сравнения дат необходимо сравнивать их как числовые значения (количество миллисекунд с 1 января 1970 года):

/**
 * Сравнивает две даты.
 * @param {Date} date1 Первая дата.
 * @param {Date} date2 Вторая дата.
 * @return {number} 0, если даты равны, отрицательное число, если date1  date2.
 */
function compareDates(date1: Date, date2: Date): number {
  return date1.getTime() - date2.getTime();
}

let dateA: Date = new Date('2024-01-01');
let dateB: Date = new Date('2024-01-02');

let comparisonResult: number = compareDates(dateA, dateB);

if (comparisonResult  0) {
  Logger.log("dateA позже dateB");
} else {
  Logger.log("dateA и dateB равны");
}

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

Автоматическое создание меток времени в Google Sheets

/**
 * Добавляет метку времени в активную ячейку Google Sheets.
 */
function addTimestampToSheet(): void {
  let ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  let sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
  let cell: GoogleAppsScript.Spreadsheet.Range = sheet.getActiveCell();
  let now: Date = new Date();
  cell.setValue(Utilities.formatDate(now, Session.getTimeZone(), "yyyy-MM-dd HH:mm:ss"));
}

Создание расписаний и уведомлений на основе текущей даты

Используя Utilities.formatDate() и ClockTriggerBuilder, можно создавать расписания для отправки уведомлений в определенное время:

/**
 * Создает триггер для запуска функции в определенное время.
 * @param {string} timeString Время в формате 'HH:mm'.
 * @param {string} functionName Имя функции для запуска.
 */
function createTimeBasedTrigger(timeString: string, functionName: string): void {
  let [hours, minutes] = timeString.split(':').map(Number);
  let now: Date = new Date();
  let triggerTime: Date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), hours, minutes, 0);

  if (triggerTime.getTime() <= now.getTime()) {
    triggerTime.setDate(triggerTime.getDate() + 1); // Переносим на следующий день, если время уже прошло
  }

  ScriptApp.newTrigger(functionName)
    .timeBased()
    .at(triggerTime)
    .create();

  Logger.log("Триггер создан для запуска функции " + functionName + " в " + Utilities.formatDate(triggerTime, Session.getTimeZone(), "yyyy-MM-dd HH:mm:ss"));
}

Автоматизация задач с учетом текущей даты

Например, можно автоматизировать процесс создания резервных копий Google Sheets в конце каждого месяца:

/**
 * Создает резервную копию Google Sheets в конце каждого месяца.
 */
function backupSheetMonthly(): void {
  let today: Date = new Date();
  if (today.getDate() === new Date(today.getFullYear(), today.getMonth() + 1, 0).getDate()) { // Проверяем, последний ли это день месяца
    let ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    let fileName: string = ss.getName() + " - Backup - " + Utilities.formatDate(today, Session.getTimeZone(), "yyyy-MM-dd");
    DriveApp.getRootFolder().createFile(ss.getAs('application/vnd.google-apps.spreadsheet').copyBlob(), fileName);
    Logger.log("Резервная копия создана: " + fileName);
  }
}

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