Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events
SOLVED

Flight time calculations, js help

Avatar

Former Community Member

Hopefully you haven't gotten too tired of my questions yet but I've learned a lot in the past couple days from this forum on this project and am getting a much better grasp on Adobe Livecycle.

My current, and hopefully last issue before completion is a method to calculate the total time between the departure and arrival times of a flight. I currently have script for AM to PM, PM to AM, AM to AM and PM to PM. The issue arose when I was told that international travel would be needed and that flights spanning 12+ hours would be taken, therefore I added date/time fields to enter the date also. My thoughts so far are write a conditional statement that says if both date fields match, carry out normal time difference calculations but I am not sure what to do if they do not match.

I am wondering if someone had a better method or could help me solve this problem with some of the built in functions with javascript or formcalc because I am still new to this and cannot figure them out. Ideally I'd like the person to enter a date and time for departure and arrival and then calculate the milliseconds between the two and convert to hours. Any ideas or guidance? I will attach a picture of the pdf to hopefully illustrate what I am trying to do better and can send the file to anyone that has any ideas.

Thanks!

untitled.JPG

1 Accepted Solution

Avatar

Correct answer by
Level 10

Hi,

The rawValue of a date field is always going to be in the yyyy-mm-dd format, so you will need to reformat it in code.  Try something like;

var d = /(\d\d\d\d)-(\d\d)-(\d\d)/.exec(DepartureDate.rawValue);

if (d !== null)

{

    var departureDate = new Date(d[1], d[2]-1, d[3]);

    util.printd("dd mmm yyyy", departureDate) + " " + (DepartureTime.formattedValue || "") + " " + (DepartureTimeZone.rawValue || "");

}

If you are happy with the display format being "dd mmm yyyy"  then you can use the formattedValue property instead (as I have done for the time) and skip the whole date conversion thing.

The time field I use is a Date/Time Field but has a data format (on the Binding tab) of time.  You don't get a time picker but it does add some smarts, if you type 11 it converts it to 11:00.

I have written a sample to test this, https://acrobat.com/#d=jRaH7EF*vPix7tBzF-n1JA

I have used a drop down for the time zone, as you seem to, but this might get quite long, as a number of places have summer time of 30 minutes and my Windows machine has Kathmandu as GMT+05:45

Hope this helps.

Bruce

View solution in original post

4 Replies

Avatar

Level 10

Hi,  If you take the values from the three fields for the departure and arrival times and generate a string in the JavaScript date utc qualified time then you can convert then into a JavaScript date object and then it is just standard Date object calculation.

So a flight leaving Sydney (GMT+10) at 17:50 and arriving at Perth (GMT+8) at 15:20 local time will take 310 minutes;

var start = new Date("21 Jun 2012 12:10 GMT+1000");

var end = new Date("21 Jun 2012 15:20 GMT+0800");

app.alert((end.getTime() - start.getTime()) / 1000 / 60);

Hope this helps

Bruce

Avatar

Former Community Member

That is exactly what I am looking for Bruce, thanks for taking the time to help, but I am having a hard time implementing it myself. I created a text box the would take my date, time and GMT code from the 3 respective fields. Using the patterns I set the date as {DD MMM YYYY} and it formats great, yet when it displays in the string it formats to 2012-6-21.

I have read other posts that have a similar problem and the fix was to turn the text field into a date/time field. I tried this and because the formatting contains a date, time and utc offset the date/time field doesn't display anything. How would I go about generating a string that contains all of those inputs and still maintain the formatting?

Avatar

Correct answer by
Level 10

Hi,

The rawValue of a date field is always going to be in the yyyy-mm-dd format, so you will need to reformat it in code.  Try something like;

var d = /(\d\d\d\d)-(\d\d)-(\d\d)/.exec(DepartureDate.rawValue);

if (d !== null)

{

    var departureDate = new Date(d[1], d[2]-1, d[3]);

    util.printd("dd mmm yyyy", departureDate) + " " + (DepartureTime.formattedValue || "") + " " + (DepartureTimeZone.rawValue || "");

}

If you are happy with the display format being "dd mmm yyyy"  then you can use the formattedValue property instead (as I have done for the time) and skip the whole date conversion thing.

The time field I use is a Date/Time Field but has a data format (on the Binding tab) of time.  You don't get a time picker but it does add some smarts, if you type 11 it converts it to 11:00.

I have written a sample to test this, https://acrobat.com/#d=jRaH7EF*vPix7tBzF-n1JA

I have used a drop down for the time zone, as you seem to, but this might get quite long, as a number of places have summer time of 30 minutes and my Windows machine has Kathmandu as GMT+05:45

Hope this helps.

Bruce

Avatar

Level 1

Hi,

I'm trying to make something similar:

I have two fields for departure (date and time) and two fields for arrival (data + time), and one field for difference that should be displayed as HH:MM.

form1.PNG

form2.PNG

I am getting minus value when arrival time is before departure and date calculation doesn't work.

I think I need to use JavaScript, could you please give me some advice / example how to manage that?