JavaScript для автоматического расчета человеко-часов в 24 раза для Adobe Form Field? - PullRequest
2 голосов
/ 07 октября 2019

Я управляю ландшафтной командой и вместо того, чтобы заполнять наши формы вручную, я хотел бы сделать это через мобильный телефон и рассчитать время автоматически в полях формы. Я не знаком с JavaScript и нуждаюсь в некоторой помощи в получении правильного кода для расчета времени экипажа и общего количества человеко-часов на площадке без этой ошибки при изменении времени. Примечание: Я буду использовать 24-часовое время.

Example of Input Error

Я пробовал несколько разных фрагментов JavaScript, которые я обнаружил, и хотя они работают, я получаю ошибку форматированияпри манипулировании вводом времени. Любые предложения о том, как записать это в Adobe?

Чтобы сгенерировать время сотрудника, я использую код ниже:

ОБНОВЛЕНИЕ РЕДАКТИРОВАТЬ, ЭТО СОЗДАЕТ НЕПРАВИЛЬНЫЕ ВРЕМЕНИ: Time Calculation Error

// start
var start = this.getField("Monday Site #1 Start Time").value;
var startArr = start.split(":");

// finish
var finish = this.getField("Monday Site #1 Depart Time").value;
var finishArr = finish.split(":");

// difference
var hourDiff = Math.abs(finishArr[0] - startArr[0]);
var minDiff = Math.floor((Math.abs(finishArr[1] - startArr[1]) / 60)*100);

if (minDiff.toString().length == 1) 
    minDiff = '0' + minDiff;

var output = hourDiff + "." + minDiff;
event.value = output;

if ((event.value == "") || (event.value == Infinity) || isNaN(event.value)) {

  event.value = "";}

Чтобы рассчитать общее время на сайте (общее количество человеко-часов для конкретного сайта), я использовал это:

var t1 = this.getField("WS1 Total").value;
var t2 = this.getField("WS1 Total").value;
var t3 = this.getField("WS1 Total").value;
event.value = t1+t2+t3

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Это сработало, с твиком для NaN:

var start = this.getField("Monday Site #1 Depart Time").value;
var finish = this.getField("Monday Site #2 Depart Time").value;

this.getField("MS1 Total").value = timeDiff(start, finish);

if ((event.value == "") || (event.value == Infinity) || isNaN(event.value)) {event.value = "";}
1 голос
/ 07 октября 2019

Вы можете вычислить прошедшее время между двумя объектами Javascript Date в миллисекундах, например:

function timeDiff(startTime, endTime) {
  var startArr = startTime.split(":");
  var endArr = endTime.split(":");
  var startDate = new Date(0, 0, 0, startArr[0], startArr[1], 0);
  var endDate = new Date(0, 0, 0, endArr[0], endArr[1], 0);
  var diff = endDate.getTime() - startDate.getTime();
  var hours = Math.floor(diff / 1000 / 60 / 60);
  diff -= hours * 1000 * 60 * 60;
  var minutes = Math.floor(diff / 1000 / 60);
  return hours + ":" + (minutes < 9 ? "0" : "") + minutes;
}

console.log(timeDiff('6:24', '8:13')) // 1:49

Или, если вы хотите, чтобы часы возвращались в десятичном виде.

function timeDiff(startTime, endTime) {
    var startArr = startTime.split(":");
    var endArr = endTime.split(":");
    var startDate = new Date(0, 0, 0, startArr[0], startArr[1], 0);
    var endDate = new Date(0, 0, 0, endArr[0], endArr[1], 0);
    var diff = endDate.getTime() - startDate.getTime();
    var hours = diff / 1000 / 60 / 60;
    return hours.toFixed(2)
}

console.log(timeDiff('6:24', '8:13')) // 1.82

Полагаю, что тогда вы можете сделать что-то вроде этого:

var finish = this.getField("Monday Site #1 Depart Time").value;
var start = this.getField("Monday Site #1 Start Time").value;

this.getField("MS1T").value = timeDiff(start, finish);
...