Как я могу превратить метку времени UNIX в значение даты в Google Sheets? - PullRequest
0 голосов
/ 31 мая 2019

Я использую Google Apps Script для извлечения некоторых данных через API. Дата, которая мне дана, является стандартной строкой ISO 8601, и мне нужно преобразовать ее в число даты, которое будет пониматься Google Sheets при его отображении (то есть как стандартное значение даты в Google Sheets / Excel)

В настоящее время я использую обходной путь, который передает строку в мои ячейки, а затем преобразовывает ее с помощью функции DATEVALUE(), но это не оптимально, поскольку я не могу использовать эту функцию в своем сценарии (из моего исследования по теме ).

Я хочу создать функцию непосредственно в скрипте Google Apps, которая преобразует объект Javascript ol 'Date() в удобочитаемое значение для моей электронной таблицы.

Я сделал несколько попыток, преобразовав секунды с 1970 года в число дней с 1900 года, но у меня всегда есть двухчасовой разрыв, который я не могу объяснить. Я подозреваю, что это связано с тем, что я нахожусь в UTC + 2, но не могу решить это, и добавление двух часов звучит как плохое решение.

Основой того, что я до сих пор получил, является следующее:

function toDateNum(string) {

  //Parsing to Unix Timestamp
  date = new Date(string).getTime() / 1000

  //Here I need convert to GSheets date value, add the number of days between 1900-01-01 and 1970-01-01


  return date ;

}

Я ищу либо арифметическое решение для этого (преобразование и добавление дат), либо функцию, интегрированную в приложение Google Sheets, которая позволила бы мне работать с этим. Какие-либо предложения ?

Большое спасибо!

РЕДАКТИРОВАТЬ (с дополнительным уточнением)

Одна из моих проблем заключается в том, что возвращенный формат toISOString не поддерживается Google-листами напрямую. Он будет читаться только как строка, а не как значение даты. В настоящее время я работаю над этим путем отправки значения toISOString в ячейки и переформатирования с использованием DateValue () непосредственно в таблице. Я пытаюсь сделать это изначально в сценарии.

Насколько мне известно, значение даты, поддерживаемое Google Sheets (и Excel), - это количество дней с 1900-01-01. Должно быть найдено простое арифметическое решение (вычисление метки времени Unix от секунд до дней, затем добавить разницу между 1900-01-01 и 1970-01-01), но, опять же, я получаю двухчасовой разрыв, который все портит .

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Вы можете достичь этого, используя new Date(string*1000), затем передав результат в Utilities.formatDate(). Умножение метки времени Unix на 1000 означает, что ваш аргумент в миллисекундах, а не в секундах. Этот вопрос о переполнении стека содержит много полезной информации для форматирования дат с использованием js.

function toDateNum(string) {
  //convert unix timestamp to milliseconds rather than seconds
  var d = new Date(string*1000);

  //get timezone of spreadsheet
  var tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();

  //format date to readable format
  var date = Utilities.formatDate(d, tz, 'dd-MM-yyyy hh:mm:ss a');

  return date;
}

Этот сценарий будет использовать настройку часового пояса в вашей электронной таблице, но вы можете изменить его, чтобы использовать часовой пояс сценария или ввести его самостоятельно, примеры ниже, если вы хотите использовать их вместо:

//use spreadsheet timezone setting
var tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();

//use script timezone setting
var tz = Session.getScriptTimeZone();

//enter your own time zone
var tz = 'GMT+0';
1 голос
/ 31 мая 2019

В вопросе, связанном ниже, ответ пользователя 79865 объясняет, как управлять датами и их форматами на листах. В документации Sheets API также указываются все различные форматы, которые вы можете использовать, а также как создавать свои собственные при работе с датами и временем. Utilities.formatDate () поможет вам изменить формат даты на тот, который вам нужен.

URL-адрес вопроса: https://webapps.stackexchange.com/questions/88621/basic-date-manipulation-in-google-script?newreg=7c66fdcf156f4ff5a30eb5fa4153b243

URL документации по листам: https://developers.google.com/sheets/api/guides/formats

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...