Как рассчитать время с помощью итерации - PullRequest
1 голос
/ 25 июня 2019

как скрипт Google обрабатывает время и даты.

Если на вашем листе есть значения времени, введенные в ячейки (2:00, 1:30 и т. Д., Представляющие 2 часа и 1 час 30), и вы хотитеперебирайте строки, суммируя итоги (таким образом, результат будет 3:30);как вы говорите гугл скрипту добавить их вместе;ссылаясь на то, что вы знаете как время, вы ВСЕГДА должны использовать 'new Date ({INSERT CELL HERE})'? *

Я пытаюсь получить код для суммирования всех значений времениИ если это более 22,5 часов (22 часа 30 минут - не половина десятого вечера), что-то сделать.

function ValidateForm(Action) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var totalpaidovertime = 0.0;
var totalinlieutime = 0.0;
  var totalhours =  0.0; //new Date("January 01, 2019 00:00");
var validatedtotalhours = 0.0;
var validatedinlieuhours = 0.0;
var validatedtotalpaidovertime = 0.0;
var ui = SpreadsheetApp.getUi();
var hoursclaimed = sheet.getRange("F4:F35").getValues();

  if(spreadsheet.getActiveSheet().getName()=="Totals"){
    Browser.msgBox("Incorrect Sheet For This Action","Please select a users sheet to validate first and try again.",ui.ButtonSet.OK);
  }else{
    if (Action == "Check Overtime"){
      //get totalhours
      for (var r=0;r<=hoursclaimed.length;r++){
        if (hoursclaimed[r].getValue() !=""){
          totalhours+=hoursclaimed[r];       
        }
      }   
      Logger.log(sheet.getRange("f4").getValue()
      //calculate totalpaidovertime variable - 22.5 is 3 days of 7.5 work day.
      if(totalhours > 22.5) {
        totalpaidovertime = 22.5;
      }
      else {
        totalpaidovertime = totalhours;
      }
      //calculate totalinlieutime variable
      if(totalhours > 22.5) {
        totalinlieutime = totalhours - 22.5;
      }
      else {
        totalinlieutime = 0.0;
      }

      if (totalhours > 22.5) {
        Browser.msgBox("Total number of hours equals " + totalhours + " hours. Only 22.5 hours (3 days) will be added to Paid Overtime.");
      }

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Нет конкретного метода для достижения того, что вы хотите, но вы можете использовать функцию displayValues ​​[1], чтобы получить значение в виде строки и манипулировать им для достижения вашей амбициозной цели.

Вот пример реализации, которую я сделал и успешно протестировал, вам нужно только изменить эти две части кода:

1) Чтобы получить массив массивов, каждый массив со строкой требуется в качестве единственного значения или пуст, если ячейка пуста: var hoursclaimed = sheet.getRange ("F4: F35"). getDisplayValues ​​();

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

  for (var r=0;r<=hoursclaimed.length;r++){
    var valueArray = hoursclaimed[r];

    if (Array.isArray(valueArray)){
      var str = valueArray[0];
      var minutes = Number(str.substring(str.length - 2, str.length));
      var hours = Number(str.substring(0, str.length - 3));
      totalhours+=(minutes/60) + hours;       
    }
  } 

Другое решение:

Вы можете также использовать функцию getValues ​​(), как она есть сейчас (которая получит массив дат), а затем использовать функции JavaScript «getHours» и «getMinutes» вместо манипулирования строками:

var minutes = date.getMinutes();
var hours = date.getHours();

[1] https://developers.google.com/apps-script/reference/spreadsheet/range#getDisplayValues()

1 голос
/ 25 июня 2019

Передача длительностей из электронной таблицы в серверный код в Google Apps Script является сложной задачей, поскольку в Google Sheets и Google Apps Script / JavaScript используются разные эпохи. Хорошей новостью является то, что мы могли бы использовать getDisplayValue() и getDisplayValues(), которые в нескольких сценариях упрощают получение длительностей в виде текстового значения, а затем сначала анализируют каждую часть времени как текст, а затем преобразуют их в числа.

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