Основные манипуляции с датой в скрипте Google

11

Я хотел бы определить пользовательскую функцию в Google Sheet. Эта функция должна сделать что-то очень простое, но мне не удалось найти, как это сделать. Я очень смущен всеми ответами, которые я прочитал, потому что я не могу найти четкую ссылку о работе с датами в скриптах Google.

Из того, что я понимаю, основные манипуляции с датой могут быть выполнены с помощью:

  • new Date()Насколько я понимаю, он определяет объект, который имеет некоторые свойства. Я не знаю, как использовать дату ячейки и преобразовать ее в такой объект.
  • Utilities.formatDate(): это изменить формат даты, представленной в виде строки .
  • библиотека Moment( http://momentjs.com/ )

В конце концов, как я могу ввести две даты (например 31/01/2016) и, скажем, найти максимум между двумя и извлечь месяц первой?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

Мне также интересно, если кто-то может объяснить схемы работы с датами или указать хорошую ссылку.

anderstood
источник
Спасибо. Другого пути нет? Кажется невероятно сложным извлечь, например, месяц даты! Кроме того, необходимо учитывать часовой пояс ... Это немного искажено для простых (фиксированных) операций с датами.
Понял
Я добавил ответ, сфокусированный в коде разоблаченного дела, но вопрос в два (манипулирование датой). Возможно, вам следует начать с поиска фрагментов кода JavaScript и онлайн-курсов.
Рубен
@ Рубен, я понимаю. Я не хотел задавать вопрос «напиши код для меня», поэтому искал общую информацию, которую я действительно не нашел. Пост Сергея Инса, который вы указали, полезен.
Понял
Что касается общей информации о JavaScript, см. Developer.mozilla.org/en-US/docs/Web/JavaScript, а в отношении скрипта Google Apps см. Developers.google.com/apps-script .
Рубен

Ответы:

14

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

Всякий раз, когда ваш скрипт вызывает .getValue()ячейку, отформатированную как дата, дата или время, он получает объект JavaScript Date . Затем к этому объекту можно применить различные методы, перечисленные на этой странице MDN, в том числе getMonth()для месяца. Пример:

  var sheet = SpreadsheetApp.getActiveSheet();
  var value = sheet.getRange('A1').getValue();  // is a Date object
  Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); 
  // examples of available methods

И наоборот, вы можете назначить объект Date ячейке с помощью setValue, и он будет автоматически отформатирован как таковой.

  sheet.getRange('B2').setValue(new Date());  // current timestamp

Часовые пояса

Временная метка в Google Sheets находится в местном часовом поясе, который задается в меню «Файл»> «Настройки электронной таблицы». Сценарий также работает в часовом поясе, который может отличаться и находится в разделе «Файл»> «Свойства проекта» в редакторе сценариев. Если эти часовые пояса не совпадают, у вас будут проблемы с временными метками.

Чтобы проверить, согласуются ли часовые пояса, вы можете сравнить оба вручную или сделать что-то вроде этого:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

Это вводит формулу =date(2015,1,1)в ячейку A1. Результат будет 2015-01-01 00:00:00 в часовом поясе таблицы. Затем сценарий получает дату и извлекает часы по местному времени сценария. Если часовые пояса совпадают, вы должны увидеть 0.0 в журнале.


источник
4

Короткий ответ

Ниже представлены две пользовательские функции в качестве примеров того, как Google Sheets и Google Apps Script могут работать с датами.

Пример 1: Получить самую новую дату

получить новейшую дату

function myFunction(date1,date2) {
  return new Date(Math.max(date1,date2)) 
}

Пример 2: Получить месяц с самой новой датой

function myFunction2(date1,date2) {
  var date = new Date(Math.max(date1,date2));
  return date.getMonth();
}

Краткое объяснение

В первом примере метод JavaScript Math.max делает свою работу.

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

Во втором примере объекту date назначается переменная, затем для получения индекса месяца используется метод JavaScript getMonth () . Имейте в виду, что JavaScript используется 0для начального элемента, 0как и для января, 1для февраля и так далее.

Ссылки

Рубена
источник
я) готов date1, date2прошел как числа (обычно: 54243)? II) Теперь я попытался извлечь месяц date2использования, date2.getMonth()но когда ячейка 01/12/2015это возвращает 10 и 11 для 02/12/2015. Я думаю, это из-за часового пояса. Функция листа month()намного проще.
Понял
Листы Google обрабатывают даты как сериализованные числа так же, как JavaScript, но у каждой из них разные даты начала. Итак, если вы хотите использовать функции дат JavaScript, сначала следует преобразовать дату в электронной таблице в дату JavaScript. Как вы уже заметили, более простой путь - использовать функции электронных таблиц для обработки дат в электронных таблицах и функции JavaScript для обработки дат в JavaScript.
Рубен
@anderstood: я добавил второй пример.
Рубен
Еще раз спасибо Что касается второго примера, как я написал, когда максимальное значение 01/12/2015 myfunction2возвращает 10, а максимальное - 12/12/2015, возвращается 11. Хотя я в порядке с 11, я не понимаю почему возвращается 10 за 01/12/2015. Как я уже сказал, я считаю, что это связано с GMT, но я не уверен. Я что-то пропустил?
Понял
@anderstood: создайте демонстрационную таблицу, поделитесь ею с кем-либо, у кого есть ссылка только для просмотра, и опубликуйте новый вопрос, включая ссылку на демонстрационную таблицу.
Рубен