Google Apps Script: Как работать с форматом даты и времени?

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

Типы данных даты и времени в Google Apps Script (Date object)

В Google Apps Script дата и время представлены объектом Date. Этот объект основан на java.util.Date и предоставляет методы для получения и установки различных компонентов даты и времени.

Получение текущей даты и времени

Для получения текущей даты и времени используется конструктор Date без аргументов:

/**
 * Получает текущую дату и время.
 * @returns {Date} Текущая дата и время.
 */
function getCurrentDateTime() {
  return new Date();
}

let now = getCurrentDateTime();
Logger.log(now); // Пример: Sat Oct 28 2023 10:00:00 GMT+0000 (Coordinated Universal Time)

Создание объектов Date из строк

Объекты Date также могут быть созданы из строк. Важно помнить, что формат строки должен быть распознан JavaScript. Рекомендуется использовать ISO 8601 формат (YYYY-MM-DDTHH:mm:ss.sssZ) для обеспечения совместимости.

/**
 * Создает объект Date из строки.
 * @param {string} dateString Строка даты в формате ISO 8601.
 * @returns {Date} Объект Date, представляющий дату из строки.
 */
function createDateFromString(dateString) {
  return new Date(dateString);
}

let dateFromString = createDateFromString("2023-10-27T12:30:00.000Z");
Logger.log(dateFromString); // Пример: Fri Oct 27 2023 12:30:00 GMT+0000 (Coordinated Universal Time)

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

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

Для форматирования даты и времени в Google Apps Script используется метод Utilities.formatDate(). Этот метод позволяет представить дату в нужном формате, учитывая часовой пояс.

Синтаксис Utilities.formatDate(): часовые пояса и форматы

Синтаксис метода Utilities.formatDate():

Utilities.formatDate(date, timeZone, format);

Где:

date: Объект Date, который нужно отформатировать.

timeZone: Строка, представляющая часовой пояс (например, "GMT", "America/Los_Angeles", "Europe/Moscow"). Список доступных часовых поясов можно найти в документации Java SimpleDateFormat.

format: Строка, определяющая формат даты и времени. Используются символы форматирования, определенные в Java SimpleDateFormat.

Примеры форматирования даты и времени в различные строковые представления

Примеры:

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

let now = new Date();

let formattedDate1 = formatDate(now, "GMT+3", "yyyy-MM-dd HH:mm:ss");
Logger.log(formattedDate1); // Пример: 2023-10-28 13:00:00

let formattedDate2 = formatDate(now, "America/Los_Angeles", "MM/dd/yyyy");
Logger.log(formattedDate2); // Пример: 10/28/2023

let formattedDate3 = formatDate(now, "GMT", "EEEE, MMMM d, yyyy");
Logger.log(formattedDate3); // Пример: Saturday, October 28, 2023

Операции с датой и временем

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

Объект Date предоставляет методы для получения отдельных компонентов даты и времени:

getFullYear(): Возвращает год.

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

getDate(): Возвращает день месяца (1-31).

getHours(): Возвращает час (0-23).

getMinutes(): Возвращает минуты (0-59).

getSeconds(): Возвращает секунды (0-59).

Реклама

getMilliseconds(): Возвращает миллисекунды (0-999).

getDay(): Возвращает день недели (0-6, где 0 – воскресенье).

Добавление и вычитание дней, месяцев, лет и т.д.

Для добавления или вычитания времени можно использовать методы setDate(), setMonth(), setFullYear(), setHours(), setMinutes(), setSeconds() и setMilliseconds(). Важно помнить, что при изменении одного компонента даты может потребоваться корректировка других компонентов.

Пример добавления дней:

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

let now = new Date();
let futureDate = addDays(now, 7);
Logger.log(futureDate); // Дата через 7 дней.

Сравнение дат

Даты можно сравнивать с использованием операторов сравнения (<, >, <=, >=, ==, !=) или методов getTime() (возвращает количество миллисекунд, прошедших с 1 января 1970 года) или valueOf() (аналогичен getTime()).

Пример:

/**
 * Сравнивает две даты.
 * @param {Date} date1 Первая дата.
 * @param {Date} date2 Вторая дата.
 * @returns {number} 1, если date1 > date2, -1, если date1  date2.getTime()) {
    return 1;
  } else if (date1.getTime() < date2.getTime()) {
    return -1;
  } else {
    return 0;
  }
}

let date1 = new Date("2023-10-27");
let date2 = new Date("2023-10-28");

let comparisonResult = compareDates(date1, date2);
Logger.log(comparisonResult); // -1

Работа с временными зонами

Установка временной зоны для скрипта

По умолчанию скрипты Google Apps Script используют временную зону проекта. Ее можно изменить в настройках проекта (Файл > Настройки проекта).

Преобразование дат между временными зонами

Для преобразования дат между временными зонами можно использовать Utilities.formatDate() и повторно создавать объект Date. Однако, этот способ полагается на строковое представление и может быть подвержен ошибкам, если формат даты не соответствует ожидаемому.

Примеры использования форматирования даты и времени в Google Apps Script

Форматирование даты для записи в Google Sheets

/**
 * Форматирует дату для записи в Google Sheets.
 * @param {Date} date Объект Date для форматирования.
 * @param {string} timeZone Часовой пояс.
 * @returns {string} Отформатированная строка даты для Google Sheets.
 */
function formatDateForSheet(date, timeZone) {
  return Utilities.formatDate(date, timeZone, "yyyy-MM-dd HH:mm:ss");
}

function writeDateToSheet() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getActiveSheet();
  let now = new Date();
  let formattedDate = formatDateForSheet(now, ss.getSpreadsheetTimeZone());
  sheet.appendRow([formattedDate]);
}

Форматирование даты для отправки в электронных письмах

/**
 * Форматирует дату для отправки в электронном письме.
 * @param {Date} date Объект Date для форматирования.
 * @param {string} timeZone Часовой пояс.
 * @returns {string} Отформатированная строка даты для электронного письма.
 */
function formatDateForEmail(date, timeZone) {
  return Utilities.formatDate(date, timeZone, "MMMM dd, yyyy HH:mm");
}

function sendEmailWithDate() {
  let now = new Date();
  let formattedDate = formatDateForEmail(now, Session.getTimeZone());

  MailApp.sendEmail({
    to: "recipient@example.com",
    subject: "Текущая дата и время",
    body: "Текущая дата и время: " + formattedDate,
  });
}

Форматирование даты для использования в URL

/**
 * Форматирует дату для использования в URL.
 * @param {Date} date Объект Date для форматирования.
 * @param {string} timeZone Часовой пояс.
 * @returns {string} Отформатированная строка даты для URL.
 */
function formatDateForUrl(date, timeZone) {
  return Utilities.formatDate(date, timeZone, "yyyy-MM-dd");
}

function createUrlWithDate() {
  let now = new Date();
  let formattedDate = formatDateForUrl(now, Session.getTimeZone());
  let url = "https://example.com/data?date=" + formattedDate;
  Logger.log(url);
}

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