Google Apps Script предоставляет мощные инструменты для автоматизации задач в Google Workspace. Одним из фундаментальных аспектов автоматизации является работа с датами. Умение получать и форматировать текущую дату позволяет создавать скрипты, реагирующие на время, генерировать отчеты с временными метками и автоматизировать множество других процессов.
Зачем получать текущую дату в Google Apps Script?
Получение текущей даты в Google Apps Script необходимо для:
- Логирования действий: Фиксация времени выполнения скрипта.
- Создания отчетов: Добавление временных меток в отчеты и документы.
- Автоматизации задач: Запуск скриптов в определенное время или с определенной периодичностью.
- Фильтрации данных: Выбор данных за определенный период.
- Именовании файлов: Создание файлов, в именах которых содержится текущая дата.
Обзор основных подходов к работе с датами
В Google Apps Script для работы с датами используется встроенный объект Date. Также можно использовать утилиты для форматирования даты и времени. Основные подходы включают:
- Создание объекта
Date. - Форматирование даты с помощью
Utilities.formatDate(). - Учет часовых поясов.
Получение текущей даты с использованием объекта 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
}