Google Apps Script предоставляет мощные инструменты для автоматизации задач в Google Workspace. Работа с датами – одна из основных потребностей при создании скриптов для, например, анализа данных, автоматической рассылки отчетов или планирования событий.
Зачем нужно получать текущую дату в Google Apps Script?
Получение текущей даты необходимо для:
Автоматической генерации отчетов: Добавление текущей даты в название или тело отчета.
Планирования задач: Создание событий в Google Calendar на текущую или будущую дату.
Учета времени: Фиксация времени выполнения скрипта или записи данных.
Персонализации рассылок: Включение текущей даты в текст электронного письма.
Обзор основных методов работы с датами
В Google Apps Script для работы с датами используется встроенный объект Date и утилита Utilities.formatDate(). Мы рассмотрим оба этих инструмента и покажем, как их применять для решения различных задач.
Метод `new Date()`: Основной способ получения текущей даты
Использование `new Date()` для получения текущей даты и времени
Основной способ получить текущую дату и время в Google Apps Script – это использовать конструктор new Date(). Этот конструктор возвращает объект Date, представляющий текущий момент времени.
Примеры кода: простые сценарии получения даты
/**
* Получает текущую дату и время.
* @return {Date} Текущая дата и время.
*/
function getCurrentDateTime(): Date {
const now: Date = new Date();
Logger.log(now); // Выводит текущую дату и время в лог
return now;
}
/**
* Пример использования функции getCurrentDateTime.
*/
function exampleUsage(): void {
const currentDateTime: Date = getCurrentDateTime();
Logger.log('Текущая дата и время: ' + currentDateTime);
}
Этот код создает новый объект Date, представляющий текущую дату и время, и выводит его в лог.
Форматирование даты в Google Apps Script
Использование `Utilities.formatDate()` для форматирования даты
Объект Date, полученный с помощью new Date(), может быть отформатирован в удобный для чтения вид с помощью утилиты Utilities.formatDate(). Эта утилита позволяет задать формат даты и часовой пояс.
Настройка часового пояса при форматировании даты
При форматировании даты важно учитывать часовой пояс, чтобы дата отображалась корректно для пользователя. Часовой пояс задается вторым аргументом функции Utilities.formatDate(). Например, Europe/Moscow.
Примеры кода: Форматирование даты в различные форматы (dd.MM.yyyy, yyyy-MM-dd и т.д.)
/**
* Форматирует дату в заданный формат.
* @param {Date} date Дата для форматирования.
* @param {string} timeZone Часовой пояс.
* @param {string} format Формат даты (например, 'dd.MM.yyyy').
* @return {string} Отформатированная дата.
*/
function formatDate(date: Date, timeZone: string, format: string): string {
const formattedDate: string = Utilities.formatDate(date, timeZone, format);
return formattedDate;
}
/**
* Пример использования функции formatDate.
*/
function exampleFormatDate(): void {
const now: Date = new Date();
const timeZone: string = 'Europe/Moscow';
const format1: string = 'dd.MM.yyyy';
const format2: string = 'yyyy-MM-dd';
const formattedDate1: string = formatDate(now, timeZone, format1);
const formattedDate2: string = formatDate(now, timeZone, format2);
Logger.log('Дата в формате dd.MM.yyyy: ' + formattedDate1);
Logger.log('Дата в формате yyyy-MM-dd: ' + formattedDate2);
}Этот код показывает, как форматировать дату в различные форматы, используя функцию Utilities.formatDate().
Получение только даты без времени
Как отделить дату от времени в объекте Date?
Иногда требуется получить только дату без времени. Для этого можно создать новый объект Date, используя только год, месяц и день из исходного объекта.
Создание новой даты только с годом, месяцем и днем
/**
* Получает дату без времени.
* @param {Date} date Дата и время.
* @return {Date} Дата без времени.
*/
function getDateOnly(date: Date): Date {
const year: number = date.getFullYear();
const month: number = date.getMonth();
const day: number = date.getDate();
return new Date(year, month, day);
}
/**
* Пример использования функции getDateOnly.
*/
function exampleGetDateOnly(): void {
const now: Date = new Date();
const dateOnly: Date = getDateOnly(now);
Logger.log('Дата без времени: ' + dateOnly);
}
Этот код создает новый объект Date, который содержит только год, месяц и день, обнуляя часы, минуты, секунды и миллисекунды.
Альтернативные подходы к получению чистой даты
Альтернативным подходом является преобразование даты в строку в нужном формате (например, ‘yyyy-MM-dd’) и последующее создание нового объекта Date из этой строки. Этот метод позволяет избежать проблем с часовыми поясами и переходом на летнее время.
Примеры практического применения
Запись текущей даты в Google Sheets
/**
* Записывает текущую дату в ячейку Google Sheets.
*/
function writeDateToSheet(): void {
const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
const now: Date = new Date();
const formattedDate: string = Utilities.formatDate(now, Session.getTimeZone(), 'dd.MM.yyyy');
sheet.appendRow([formattedDate]);
}
Этот код записывает текущую дату в формате dd.MM.yyyy в новую строку текущего листа Google Sheets.
Создание событий в Google Calendar с текущей датой
/**
* Создает событие в Google Calendar на текущую дату.
*/
function createCalendarEvent(): void {
const calendarId: string = 'your_calendar_id@group.calendar.google.com'; // Замените на ID вашего календаря
const calendar: GoogleAppsScript.Calendar.Calendar = CalendarApp.getCalendarById(calendarId);
const now: Date = new Date();
const title: string = 'Событие на ' + Utilities.formatDate(now, Session.getTimeZone(), 'dd.MM.yyyy');
const startTime: Date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0); // 10:00
const endTime: Date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 11, 0, 0); // 11:00
calendar.createEvent(title, startTime, endTime);
}
Этот код создает событие в Google Calendar на текущую дату с заголовком, включающим текущую дату.
Отправка электронных писем с указанием текущей даты
/**
* Отправляет электронное письмо с указанием текущей даты.
*/
function sendEmailWithDate(): void {
const recipient: string = 'recipient@example.com'; // Замените на адрес получателя
const subject: string = 'Текущая дата';
const now: Date = new Date();
const formattedDate: string = Utilities.formatDate(now, Session.getTimeZone(), 'dd.MM.yyyy');
const body: string = 'Сегодня: ' + formattedDate;
MailApp.sendEmail(recipient, subject, body);
}
Этот код отправляет электронное письмо с темой "Текущая дата", в теле которого указана текущая дата в формате dd.MM.yyyy.