Как получить строковое значение 5-значного формата серийной даты из ячейки в моем скрипте? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть формула в ячейке, которая выполняет vlookup для другого листа, комбинируя значения двух ячеек в моей электронной таблице. Это таблица имен слева и даты вверху. Я объединяю значения имени и даты в одно строковое значение и использую его как значение ключа vlookup, что прекрасно работает. Теперь мне нужно сделать то же самое в моем скрипте Google, но значение даты теряет меня. В формуле ячейки vlookup значением даты является 5-значный серийный код даты. Однако, когда я объединяю значения двух ячеек в своем скрипте, я не могу получить тот же 5-значный серийный код из ячейки. Я перепробовал все преобразования числа, строки, текста и т. Д. Какую функцию я могу использовать, чтобы получить это 5-значное значение даты в виде строки в моем сценарии?

function serialDatevalue(){
  var WB = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var NewDate = new Date();
  var NewDate =  WB.getRange('B1').getValue();
  var JSdate =  WB.getRange('B1').getValue();
  Browser.msgBox(Number(NewDate));

// Some others that I have tried
//  var JSdate = Date.parse(DateValue);
//  var JSdate = Number(DateValue);
//  var JSdate = Utilities.formatDate(DateValue, 'PST', '%');
}

например, 13 апреля 2019 года = 43568. Я хочу получить это 5-значное значение в виде строки.

Я получаю 'Сб 13 апреля 2019 00:00:00 GMT-0700 (PDT)' или другие более длинные целые значения.

Пожалуйста, помогите.

1 Ответ

1 голос
/ 29 апреля 2019

От Ответ Tainake до Получение числа, эквивалентного длительности, с использованием GAS

var serialNumber = (dateObject.getTime() / 1000 / 86400) + 25569; // Reference: https://stackoverflow.com/a/6154953


Более простой способ получитьСерийный номер, соответствующий определенному значению даты ячейки в Google Sheets, используется встроенной функцией Google Sheets TO_PURE_NUMBER .Это связано с тем, что в Google Sheets и JavaScript, которые используются в Google Apps Script, использовалась другая эпоха (для обозначения серийных номеров использовалась ссылочная дата 0).

С https://developers.google.com/sheets/api/guides/concepts#datetime_serial_numbers

Серийные номера даты / времени

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

В Google Sheets используется форма дата эпохи , который обычно используется в электронных таблицах.Целая числовая часть значения (слева от десятичной дроби) считает дни с 30 декабря 1899 г. Дробная часть (справа от десятичной дроби) считает время в виде доли одного дня.Например, 1 января 1900 года в полдень будет 2,5, 2, потому что это два дня после 30 декабря 1899 года, и 0,5, потому что полдень - это полдня.1 февраля 1900 года в 3 часа дня будет 33.625.

Обратите внимание, что в Google Sheets корректно трактуется 1900 год как обычный, а не високосный год.

С другой стороны, использование JavaScript1 января 1970 г. 00:00 UTC в качестве даты эпохи и использование миллисекунд в качестве единицы.

Предупреждение: пользовательский код для преобразования сериализованных чисел из одного в другое должен учитывать, если электронная таблица и GoogleСценарии приложений используют один и тот же часовой пояс или нет.

Связано

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