Сравните часы с гугл-скриптом - PullRequest
0 голосов
/ 26 декабря 2018

Я новичок в мире программирования: D и у меня есть сомнения по поводу сравнения часов.

У меня есть лист со следующей информацией

   Name | Time out | Time in |
   nam_1  10:00:00
   nam_2  09:00:00

Время ожидания часовбыли введены с использованием этого кода:

var start = Utilities.formatDate (new Date (), "Europe / Berlin", "HH: mm: ss");

sheet.appendRow([name, start]);

Я хотел бы попробовать:

var time_in = "13:00:00";
   if time out> 13:00:00:
      sheet.getRange(j+1, 2).setValue(time_in);

Проблема в том, что я не знаю точно, как это сделать.Сейчас я попробовал:

function getTimeFromDateStartUserInput(date) { 
    return Utilities.formatDate(date, "Europe/Berlin", "HH:mm:ss");
}
function insertTimeIn(){
   var file = DriveApp.getFilesByName("MySheet");
   var doc = SpreadsheetApp.open(file.next());
   var sheet = doc.getSheetByName("Sheet1");
   if(sheet!=null){
      var dataRange = sheet.getDataRange();
      var values = dataRange.getValues();
      var time_in = new Date ('30/12/1899 17:00:00');
      time_in.setHours(13,0,0,0);
      var inFormated = getTimeFromDate(time_in);
      for(var i = 0; i<values.length; i++){
         if(values[i][1]>=inFormated && values[i][2]=""){
            sheet.getRange(j+1, 2).setValue(time_in);
      }else{
           sheet.getRange(j+1, 2).setValue("Nop");
      }

   }
}

Однако с этим кодом я ничего не добился.

Я думаю, что проблема может заключаться в том, что любая запись в столбце «Тайм-аут»имеет такой дизайн: суббота 30 декабря 14:51:22 GMT + 01: 00 1899.

Поэтому я думаю, что это не работает, так как я сравниваю час с полным объектом Date.

Логичной вещью, я думаю, было бы вызвать функцию getTimeFromDateStartUserInput для всего ввода значений [i] [1], но я не знаю, как это сделать.

Может кто-нибудь помочьмне с этой проблемой?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Простым ответом может быть автоматическое преобразование начальной отметки времени в текущую дату.Я не совсем уверен, каким будет использование вашего листа, но я использую лист для ввода времени и использую функцию onEdit (), чтобы убедиться, что пользователь правильно ввел dateTime.

    function onEdit(){
if(cell.getValue() instanceof Date === true){
      if(cell.getValue().getFullYear()<2018 ){
      formatDate();
      }  
     }
    }


    function formatDate() {
    var timeValue, cell,hour,minute,time,row,dateObj,month,day,year,newDate
      cell = SpreadsheetApp.getActive().getActiveCell()
      timeValue = cell.getValue()
      hour = timeValue.getHours()
      minute = timeValue.getMinutes() < 10? '0'+timeValue.getMinutes(): timeValue.getMinutes();
      time = hour+":"+minute
      row = cell.getRow()
      dateObj = new Date();
      month = dateObj.getUTCMonth() + 1; //months from 1-12
      day = dateObj.getUTCDate();
      year = dateObj.getUTCFullYear();

    newDate = month + "/" + day + " "+ time; // formatted dateTimestamp to replace timestamp with

    cell.setValue(newDate)
    }

Дайте мне знать, если это работает для вас.В моем приложении функция onEdit проверяет активную ячейку и продолжает, если введенное значение является dateTime.Если это так, он проверяет, в каком году дата (одни только значения времени автоматически устанавливаются 30.12.1899 и, следовательно, выбрасывает дикие числа при получении длительностей между dateTimestamp и отметкой времени без даты.

0 голосов
/ 26 декабря 2018

Это мое предположение о том, что вы пытаетесь сделать.Это не работает, потому что все еще содержит ошибки.Я прокомментировал некоторые из них, но не могу их исправить, потому что до сих пор не ясно, что вы пытаетесь сделать ..

function insertTimeIn(){
  var files = DriveApp.getFilesByName('SpreadsheetName');
  var n=0;
  while(files.hasNext()){
    var file=files.next();
  }
  if(++n>1){
    throw("Error: There is more than one file with that name in function insertTimeIn");
    return;
  }
  if(file.getMimeType()==MimeType.GOOGLE_SHEETS){
    var doc=SpreadsheetApp.openById(file.getId());
    var sheet=doc.getSheetByName("Sheet1");
    if(sheet!=null){
      var dataRange=sheet.getDataRange();
      var values=dataRange.getValues();
      var time_in=new Date(1899,11,30,13,0,0);
      var inFormated=Utilities.formatDate(time_in, Session.getScriptTimeZone(), "HH:mm:ss");//it returns a string not a date
      for(var i=0;i<values.length;i++){
        if(values[i][1]>=inFormated && values[i][2]=""){//informated is a string not a date so greater than doesn't really make much sense here.
          sheet.getRange(j+1, 2).setValue(time_in);//j is undefined
        }else{
          sheet.getRange(j+1, 2).setValue("Nop");//again j is undefined
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...