Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.

Insert numbers of days in a field and calculate next date excluding Weekend days (Saturday, Sunday)

Avatar

Level 2

Hi, I have three fields like this:

"Date field", "Numbers of Day"s and "Calculate Date fields"

I like to calculate like this: Date field + Numbers of Days = Calculate Date (Excluding Weekend days)

8 Replies

Avatar

Level 10

Hi,

Try this JavaScript function,

var Days = { Sunday : 0, Monday : 1, Tuesday : 2, Wednesday : 3, Thursday : 4, Friday : 5, Saturday : 6 }; 

function addWorkingDays(startDate, days)

{

    var weekend = [Days.Saturday, Days.Sunday];

    for (var currentDate = startDate; days > 0; currentDate.setDate(currentDate.getDate()+1))

    {

        if (weekend.indexOf(currentDate.getDay()) < 0)

        {

            days--;

        }

    }

    return currentDate;

}

 

You need to pass in the startDate (as a JavaScript object) and the number of days.

You probably want to add it to the calculate event of the "Calculate Date" field.

Regards

Bruce

Avatar

Level 2

Hi, It's not working yet, I have three fillable fields named as:

"Date field"

"Days"

"Calculate Date"



1. I want that that i can enter date in "startDate" with this format: dd mmm yyyy

2. Then i enter numbers of days  in "days" fields

3. I want the result in "Calculate Date" field but i want that script count 5 days in a week. (Skip all weekend days like Saturday and Sunday)


Please see below as sample


Sunday 6 Mar 2016 + 20 days = Monday 4 Apr 2016  (Skip all weekend days)


Please, see below script, but there is problem that this script not skip weekend days:


// Custom Calculate script for NewDate field

(function () {

    // Get date entered into the OrigianlDate field

    var sDate = getField("OriginalDate2").valueAsString;

    // Convert string to date

    var d = util.scand("dddd d mmm yyyy", sDate);

    // Get the number of days added, as a number

    var days = getField("DaysAdded10").value;

    // Add days to date

    d.setDate(d.getDate() + days);

    // Populate this field with the result

    if (sDate) {

        event.value = util.printd("dddd d mmm yyyy", d);

    } else {

        event.value = "";

    }

})();

Please amend this code, so that week should count 5 days in a week or skill all Saturday and Sunday

Avatar

Level 10

Hi,

Try changing the line of code;

d.setDate(d.getDate() + days);

To

d = addWorkingDays(d, days)

(and add the rest of my code above at the top)

Bruce

Avatar

Level 2

The code is not working.

Please again see below script, it is working good, but only it not skip all Saturdays and Sunday:

// Custom Calculate script for NewDate field

(function () {

    // Get date entered into the OrigianlDate field

    var sDate = getField("OriginalDate2").valueAsString;

    // Convert string to date

    var d = util.scand("dddd d mmm yyyy", sDate);

    // Get the number of days added, as a number

    var days = getField("DaysAdded10").value;

    // Add days to date

    d.setDate(d.getDate() + days);

    // Populate this field with the result

    if (sDate) {

        event.value = util.printd("dddd d mmm yyyy", d);

    } else {

        event.value = "";

    }

})();

Avatar

Level 2

This below is another code, but problem is that this code skip only first weekend days. For example when i add 14 days, it only skip one weekend days, whereas it should skip all weekend days. // Custom Calculate script for NewDate field

(function () {

    // Get date entered into the OrigianlDate field

    var sDate = getField("OriginalDate2").valueAsString;

    // Convert string to date

    var d = util.scand("dddd d mmm yyyy", sDate);

    // Get the number of days added, as a number

    var days = getField("DaysAdded10").value;

    // Add days to date

    d.setDate(d.getDate() + days);

   // possible adjustment for weekend

   var nAdj = 0;

    // get the zero based day of the week starting on Sunday

    var nDay = d.getDay();

    // test for Sunday or a value  day value of 0

     if(nDay == 0) nAdj = 1; // bump to Monday

    // test for Saturday or a day value of 6

    if(nDay == 6) nAdj = 2; // bump to Monday

   // adjust date

   d.setDate(d.getDate() + nAdj);   // adjust computed date by needed bump

    if (sDate) {

        event.value = util.printd("dddd d mmm yyyy", d);

    } else {

        event.value = "";

    }

})();

Avatar

Level 10

Hi,

Are you using Adobe LiveCycle Designer or Acrobat to edit your form, that is it an XFA Form or a AcroForm.  This code would suggest you are working on an AcroForm, in which case you would be better off in a different forum, maybe this one PDF Forms

If you are using Designer then try this code in the calculate event of the calculate date field.

var Days = { Sunday : 0, Monday : 1, Tuesday : 2, Wednesday : 3, Thursday : 4, Friday : 5, Saturday : 6 };

function addWorkingDays(startDate, days)

{

    var weekend = [Days.Saturday, Days.Sunday];

    for (var currentDate = startDate; days > 0; currentDate.setDate(currentDate.getDate()+1))

    {

        if (weekend.indexOf(currentDate.getDay()) < 0)

        {

            days--;

        }

    }

    return currentDate;

}

if (!OriginalDate2.isNull && !DaysAdded10.isNull)

{

  var sDate = OriginalDate2.formattedValue;

  var d = util.scand("dddd d mmm yyyy", sDate);

  var calculateDate = addWorkingDays(d, DaysAdded10.rawValue);

  isNaN(calculateDate) ? null : util.printd("YYYY-MM-DD", calculateDate, true);

}

This document explains the differences http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/AcroJS_DesignerJS.pdf

Regards

Bruce

Avatar

Level 2

Hi Bruce,

How can you modify the script so that the calculation works as follows:

For example the date:

09.03.2016 + 1 day should return 09.03.2016

09.03.2016 + 3 days should return 11.03.2016

09.03.2016 + 5 days should return 15.03.2016

The script above is OK for me but always the result should be minus one day.

Avatar

Level 10

Hi,

Try changing the line;

var calculateDate = addWorkingDays(d, DaysAdded10.rawValue);

to

var calculateDate = addWorkingDays(d, DaysAdded10.rawValue - 1);

Regards

Bruce