Основные манипуляции с датой в скрипте 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);  
}

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



Спасибо. Другого пути нет? Кажется невероятно сложным извлечь, например, месяц даты! Кроме того, необходимо учитывать часовой пояс ... Это немного искажено для простых (фиксированных) операций с датами.
Понял

Я добавил ответ, сфокусированный в коде разоблаченного дела, но вопрос в два (манипулирование датой). Возможно, вам следует начать с поиска фрагментов кода 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: создайте демонстрационную таблицу, поделитесь ею с кем-либо, у кого есть ссылка только для просмотра, и опубликуйте новый вопрос, включая ссылку на демонстрационную таблицу.
Рубен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.