Я использую 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), но, опять же, я получаю двухчасовой разрыв, который все портит .