Skip to main content
Inspiring
September 5, 2024
Answered

What's the javascript to convert Y/N to value then subtract from a previously calculated amount?

  • September 5, 2024
  • 3 replies
  • 1001 views

I'm trying to create a form to submit missing pay. I've figured out how to subtract the start time from the end time (even if the end time is PM and the start time is AM) then convert the time to decimal. But I've got a drop-down that should subtract 30 minutes for meal break and I can't figure out the javascript to do it.

 

I think it has something to do with having multiple event.value statments?

 

Here's the form: 

 

Here's the code (underlined is code that's not working): 

//to calculate total time
var startTimeString = this.getField("TimeIn1").valueAsString;
var endTimeString = this.getField("TimeOut1").valueAsString;
var startHour=startTimeString.split(":")[0];
var startMin=startTimeString.split(":")[1];
var endHour=endTimeString.split(":")[0];
var endMin=endTimeString.split(":")[1];
if (Number(startHour) > Number(endHour)) {
    event.value = (60 * (startHour-endHour)) + (startMin-endMin);
    }
else {
    event.value = (60*(endHour-startHour)) + (endMin-startMin);
    }
   
  // to subtract mealBreak
    var mealBreak = this.getField("Y/N1");
       if (mealBreak = "Y" || mealBreak = "") { event.value = event.value-30; }
    else { event.value; }

//to convert to decimal hours
    event.value=event.value/60
This topic has been closed for replies.
Correct answer Judy.Inmtn.8642

This works now! Thanks everyone!

 

var startTimeString = this.getField("TimeIn").valueAsString;
    var endTimeString = this.getField("TimeOut").valueAsString;
   
    if (startTimeString !== "" && endTimeString !== "") {
        var startHour = Number(startTimeString.split(":")[0]);
        var startMin = Number(startTimeString.split(":")[1]);
        var endHour = Number(endTimeString.split(":")[0]);
        var endMin = Number(endTimeString.split(":")[1]);
        var totalMinutes = 0;
       
        if (startHour > endHour) { totalMinutes = (60 * ((24-startHour) + endHour)) + (startMin - endMin);}
        else { totalMinutes = (60 * (endHour - startHour)) + (endMin - startMin);}
       
        var mealBreak = this.getField("Y/N").valueAsString;
        if (mealBreak == "Y" || mealBreak == " ") { totalMinutes -= 30;}
        event.value = totalMinutes / 60;}
    else { event.value = "";}

3 replies

Nesa Nurani
Community Expert
Community Expert
September 6, 2024

Use this:

var startTimeString = this.getField("TimeIn1").valueAsString;
var endTimeString = this.getField("TimeOut1").valueAsString;

if (startTimeString !== "" && endTimeString !== "") {
 var startHour = Number(startTimeString.split(":")[0]);
 var startMin = Number(startTimeString.split(":")[1]);
 var endHour = Number(endTimeString.split(":")[0]);
 var endMin = Number(endTimeString.split(":")[1]);

 var totalMinutes = 0;

 if (startHour > endHour) {
  totalMinutes = (60 * (startHour - endHour)) + (startMin - endMin);} 
 else {
  totalMinutes = (60 * (endHour - startHour)) + (endMin - startMin);}

 var mealBreak = this.getField("Y/N1").valueAsString;
  if (mealBreak === "Y" || mealBreak == "") {
   totalMinutes -= 30;}

 event.value = totalMinutes / 60;} 
else {
 event.value = "";}

Since you use dropdown field for "Y", "N" you can't have blank "" unless you made it with a script, so if you used space character in the script replace mealBreak == "" with mealBreak == " "

Inspiring
September 6, 2024

This is beautiful!!

Except I just realized that if the IN time is bigger than the Out time and I subtract out from in, I'm off by 8 hours...

I changed the code to:

if (startHour > endHour) {
totalMinutes = (60 * ((24-startHour) - endHour)) + (startMin - endMin);}

 

But now I'm getting a reference error because I don't know javascript and how to subtract the variable from 24 correctly

Judy.Inmtn.8642AuthorCorrect answer
Inspiring
September 6, 2024

This works now! Thanks everyone!

 

var startTimeString = this.getField("TimeIn").valueAsString;
    var endTimeString = this.getField("TimeOut").valueAsString;
   
    if (startTimeString !== "" && endTimeString !== "") {
        var startHour = Number(startTimeString.split(":")[0]);
        var startMin = Number(startTimeString.split(":")[1]);
        var endHour = Number(endTimeString.split(":")[0]);
        var endMin = Number(endTimeString.split(":")[1]);
        var totalMinutes = 0;
       
        if (startHour > endHour) { totalMinutes = (60 * ((24-startHour) + endHour)) + (startMin - endMin);}
        else { totalMinutes = (60 * (endHour - startHour)) + (endMin - startMin);}
       
        var mealBreak = this.getField("Y/N").valueAsString;
        if (mealBreak == "Y" || mealBreak == " ") { totalMinutes -= 30;}
        event.value = totalMinutes / 60;}
    else { event.value = "";}
PDF Automation Station
Community Expert
Community Expert
September 5, 2024

First, you should change var mealBreak = this.getField(""Y/N1"); to var mealBreak = this.getField(""Y/N1").valueNext, for a Boolean if statement you need 2 equal signs:

mealBreak == "Y" || mealBreak == ""

Inspiring
September 5, 2024

but how do I get it to subtract 30 minutes from the previous step, which outputs the time into minutes? It should only subtract 30 if the answer is "Y" or "" - not if it's "N"

PDF Automation Station
Community Expert
Community Expert
September 5, 2024

Can you upload the form?

Bernd Alheit
Community Expert
Community Expert
September 5, 2024
 Use this:
var mealBreak = this.getField("Y/N1").value;