Как читать стоимость часа правильно в рабочем листе Google

Панорама

Ячейка A1 у него есть стоимость 01:00 (час). Использовав такую функцию как следующая:

function prueba() {
  var libro = SpreadsheetApp.getActiveSpreadsheet();
  var hoja = libro.getSheetByName("Hoja 1");
  var datos = hoja.getDataRange().getValues();
  var valor = datos[0][0];
  Logger.log(valor.getHours());
  Logger.log(valor.getMinutes());
}

Регистрируется стоимость

1.0  
36.0

Ожидаемое состоит в том, чтобы зарегистрированная стоимость пошла:

1.0  
0.0

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

Комментарии

Это "реальный вопрос", для которого я нашел ответ в stackoverflow.com. См. ссылка.

Не был переведен вопрос, но он мог бы говорить, что она основана на ссылке.

Ссылки

5
задан 23.05.2017, 15:39
1 ответ

Панорама

Рабочий лист и Javascript манипулируют различной формы датами а следовательно необходимо вводить добавочные линии кода. Появляется главная функция и два ты дополнил бы, чтобы получать секунды, минуты или часы начиная с даты.

Код

Изменения в функцию, представленную в вопросе:

function prueba() {
  var libro = SpreadsheetApp.getActiveSpreadsheet();
  var hoja = libro.getSheetByName("Hoja 1");
  /* Las siguientes líneas se puede retirar
    var datos = hoja.getDataRange().getValues();
    var valor = datos[1][1];
    Logger.log(valor.getHours());
    Logger.log(valor.getMinutes());
  */
  // Agregar las siguientes líneas
  var h = Math.floor(getValueAsHours(hoja.getRange(2,2)));
  var m = Math.floor(getValueAsMinutes(hoja.getRange(2,2))) - h*60;
  Logger.log(h);
  Logger.log(m);
}

Из ответа Эрика Коледа 2013-07-22 14:20:54Z были взяты следующие вспомогательные функции:

function getValueAsSeconds(range) {
  var value = range.getValue();

  // Tomar el valor de fecha en la zona horaria de la hoja de cálculo.
  var spreadsheetTimezone = range.getSheet().getParent()
      .getSpreadsheetTimeZone();
  var dateString = Utilities.formatDate(value, spreadsheetTimezone, 
      'EEE, d MMM yyyy HH:mm:ss');
  var date = new Date(dateString);

  // Inicializar la fecha del epoch.
  var epoch = new Date('Dec 30, 1899 00:00:00');

  // Calcular el número de milisegundos entre el epoch y el valor
  var diff = date.getTime() - epoch.getTime();

  // Convertir los milisegundos a segundos y devolver el resultado.
  return Math.round(diff / 1000);
}

function getValueAsMinutes(range) {
  return getValueAsSeconds(range) / 60;
}

function getValueAsHours(range) {
  return getValueAsMinutes(range) / 60;
}

Пример использования, чтобы регистрировать часы ячейки A1.

var range = SpreadsheetApp.getActiveSheet().getRange('A1');
Logger.log(getValueAsHours(range));

Объяснение

Ответа Сергея insas 2013-07-18 15:36:28Z

Рабочие листы используют как дата ссылки 12/30/1899 в то время как Javascript использует 01/01/1970, это значит, что есть 25,568 дня различия между обоими ссылками. Это принимая, что используется та же часовая зона в обеих системах. Когда превращает стоимость даты в рабочий лист в объект даты Javascript механизм GAF, автоматически добавь различие, чтобы поддерживать консистенцию между обеими датами.

В этом случае не хочет быть известна реальная дата о чем-то, в Вашем месте себе хочет абсолютную стоимость часов, например, продолжительность службы, так что необходимо снимать desfasamiento 25,568 дней. Это реализует используя метод getTime() который дает, как оказанный миллисекунды, считаемые с даты ссылки Javascript, единственная вещь, которую ты знаешь, - стоимость в миллисекундах даты рабочего листа ссылки и уменьшать эту стоимость объекта настоящей даты. Потом немного математики, чтобы получать часы в месте миллисекунды и мы заканчиваемся.

Комментарии

Issue 402: Буквальный Get о string from в spreadsheet range упомянули в ответе Эрика, но эта была помечена как упорядоченный 4 дня назад с наблюдением, который документация готова быть напечатанной. Он был решен добавляя range.getDisplayValue и range.getDisplayValues, однако, это могло бы не быть полезным в случае, если не захочет быть измененным формат, в котором она является информацией о типе, датируй.

В связи с кодом, были переведены комментарии, включенные в того же самого, но назови их переменных они поддались такой который. Попал разрыв линии в один линий, которая была слишком длинной, чтобы избегать того, чтобы она явилась горизонтальной линейкой прокрутки.

4
ответ дан 01.12.2019, 08:16

Теги

Похожие вопросы