【问题标题】:JavaScript to auto-calculate man-hours in 24-time for Adobe Form Field?JavaScript 24 时间自动计算 Adob​​e Form Field 的工时?
【发布时间】:2019-10-06 21:37:01
【问题描述】:

我经营一个景观团队,而不是手动填写我们的表格,我想通过手机完成,并在表格字段中自动计算时间。我熟悉 JavaScript,需要一些帮助才能获得正确的代码,以便在我更改次。 注意:我将使用 24 小时制。

我尝试了一些我发现的不同的 JavaScript sn-ps,虽然它们可以工作,但在处理时间输入时出现格式错误。关于如何将其编写到 Adob​​e 中的任何建议?

要生成员工时间,我使用以下代码:

更新编辑这会产生不正确的时间:

// 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

【问题讨论】:

  • 您尝试更新的表单字段的格式是什么?
  • HH:MM的标准时间格式
  • 那么event.value的格式是什么?
  • 感谢 ksav!更改为无格式,这消除了错误。 但是 今天在现场测试表单时,我注意到时间计算不正确。请参阅上面的更新编辑。我应该为此发一个新帖子吗?
  • 我不确定这里的错误是什么。你期望2.18 + 2.18 + 2.18 等于什么?

标签: javascript forms time adobe


【解决方案1】:

您可以像这样以毫秒为单位calculate the elapsed time between two Javascript Date objects

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);

【讨论】:

  • 我在 adobe 的自定义脚本中尝试了这些 sn-ps,但它们没有给我任何计算。请记住,当我离开和到达时,我是通过 PDF 格式的表单域手动输入时间。请原谅我是 JavaScript 的小伙伴,但这些表单字段应该与变量匹配,对吧? Fields
  • 您应该可以添加此函数,并将其用作计算employee calculation 的助手。您需要使用您的开始时间和结束时间调用该函数,例如timeDiff('6:24', '8:13');
  • 虽然 sn-p 确实有效,但最终的计算是不正确的。 For example see my other post which hasn't been answered
  • 您能否详细说明哪个计算不正确?
【解决方案2】:

这行得通,对 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 = "";}

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多