Получение числа, эквивалентного длительности, с использованием ГАЗА - PullRequest
1 голос
/ 18 апреля 2019

У меня есть ячейка, которая имеет значение типа продолжительности, Я установил значение 00:10:00, что составляет 10 минут, Когда я изменю формат ячейки на номер, он покажет 0,01.

Как получить программно с помощью скрипта приложений десятичный эквивалент кода скрипта приложения?

00: 10: 00 - 0,01 10:00:00 - это 0,42

Какой расчет используется для преобразования этой строки продолжительности?

1 Ответ

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

Как насчет этого ответа?

Значения 0.01 и 0.42 являются серийными номерами.Но в этом случае, когда видна каждая ячейка, 0.01 и 0.42 равны 0.00694444444444444 и 0.416666666666667.Вы также можете подтвердить это.

Если вы хотите преобразовать 0.00694444444444444 и 0.416666666666667 в 00:10:00 и 10:00:00, соответственно, выполните следующую процедуру.

  1. Преобразование серийного номера во время Unix.
  2. Преобразование времени Unix в объект даты.
  3. Получение значений, таких как 00:10:00 и 10:00:00.

Пример сценария:

var serialNumbers = [0.00694444444444444, 0.416666666666667];

for (var i = 0; i < serialNumbers.length; i++) {
  var unixTime = (serialNumbers[i] - 25569) * 86400 * 1000; // Reference: https://stackoverflow.com/a/6154953
  var dateObject = new Date(unixTime);
  var value = dateObject.toISOString().split("T")[1].split(".")[0];
  console.log(value); // 00:10:00 and 10:00:00
}

Ссылки:

Если это не тот результат, который вам нужен, я прошу прощения.

Редактировать 1:

Когда строка типа "00:10:00", "10:00:00" преобразуется в серийный номер, как насчет следующего сценария?В этом сценарии поток выглядит следующим образом.

  1. Преобразование строки в объект даты.
  2. Преобразование объекта даты в время Unix.
  3. Преобразование времени Unix в серийный номеркак 0.006944444445252884 и 0.4166666666678793.

var durations = ["00:10:00", "10:00:00"];
for (var i = 0; i < durations.length; i++) {
  var ISO8601 = "1899-12-30T" + durations[i] + "Z";
  var dateObject = new Date(ISO8601);
  var serialNumber = (dateObject.getTime() / 1000 / 86400) + 25569; // Reference: https://stackoverflow.com/a/6154953
  console.log(serialNumber); // 0.006944444445252884 and 0.4166666666678793
}

Редактировать 2: Использование значений из ячеек, полученных с помощью getValues()

  • 00:10:00 и 10:00:00, помещается в ячейки электронной таблицы.
  • Значения из вышеприведенных ячеек извлекаются с помощью getValues().
  • Из найденных значений вы хотите получить серийный номер.

Я могу понять о вашемдополнительный вопросЕсли мое понимание правильное, как насчет этого примера сценария?

Как точка этой ситуации, я думаю, что разницу во времени необходимо учитывать.Поскольку значения, полученные с помощью getValues(), уже были объектом даты с разницей во времени.Таким образом, в этом случае это смещение необходимо удалить.

В этом примере сценария предполагается, что ячейки "A1" и "A2" имеют 00:10:00 и 10:00:00 в качестве длительности.Этот пример сценария выглядит следующим образом.

  1. Извлечение значений из ячеек с использованием getValues().
  2. Извлечение разницы во времени.
  3. Удаление разницы во времени изизвлеченные значения.
  4. Получить серийный номер.

Пример сценария:

var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:A2").getValues();
var offset = (new Date()).getTimezoneOffset(); // Retrieve the time difference.
for (var i = 0; i < values.length; i++) {
  var dateObject = new Date(values[i][0].getTime() - (1000 * 60 * offset));
  var serialNumber = (dateObject.getTime() / 1000 / 86400) + 25569; // Reference: https://stackoverflow.com/a/6154953
  Logger.log(serialNumber) // 0.006944444445252884 and 0.4166666666678793
}
...