Home › Forums › Classic DFFS › Add days to a date field
- This topic has 6 replies, 4 voices, and was last updated 4 years, 1 month ago by Alexander Bautz.
-
AuthorPosts
-
-
February 2, 2018 at 02:59 #19571
Alex, I see this topic: https://spjsblog.com/forums/topic/rules-to-set-date-field-value-to-a-calculated-value/
but I am hoping that you have some other way to add a number of days with a rule to a date field. Much like you have Today+7 in the set field value of a rule… I only need to take an existing date and add a number of days to it… {StartDate}+7.
Any tips other than the JS in the topic above?
-
February 7, 2018 at 19:17 #19632
Hi,
Unfortunately this is currently not possible in the set field value section. What you can do it to add the below snippet to your Custom JS and add a call to “setDateFromRule” in the “Run these functions / trigger these rules” section of the rule. I’ll add these functions to the spjs-utility.js file in the next version.function getDateFieldAsDateObject(fin){ var dateVal, hour = 12, minute = 0, dateArr, lcid, format, fArr, sep, date, y, m , d; dateVal = jQuery("#dffs_" + fin).find("input:text").val(); if(dateVal !== ""){ if(jQuery("#dffs_" + fin).find("select").length > 0){ hour = jQuery("#dffs_" + fin).find("select:first").val(); minute = jQuery("#dffs_" + fin).find("select:last").val(); } lcid = jQuery("#dffs_" + fin).find("a[onclick^='clickDatePicker']").attr("onclick").match(/lcid=([^&]*)/)[1]; format = spjs.dffs.data.lcidToDateFormat[lcid]; sep = format.match(/[^dmy]+/).toString(); fArr = format.split(sep); dateArr = dateVal.split(sep); y = Number(dateArr[fArr.indexOf("y")]); m = Number(dateArr[fArr.indexOf("m")]); d = Number(dateArr[fArr.indexOf("d")]); date = new Date(y,m-1,d,hour,minute,0); return date; }else{ return ""; } } function setDateFieldFromDateObject(fin,date,offsetDays){ if(date.getDate === undefined){ return ""; } var lcid, format, sep, dStr, hour, minute; lcid = jQuery("#dffs_" + fin).find("a[onclick^='clickDatePicker']").attr("onclick").match(/lcid=([^&]*)/)[1]; format = spjs.dffs.data.lcidToDateFormat[lcid]; dStr = format; sep = format.match(/[^dmy]+/).toString(); if(typeof offsetDays === "number"){ date.setDate(date.getDate() + offsetDays); } dStr = dStr.replace("m", (date.getMonth() + 1) < 10 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1)); dStr = dStr.replace("d", date.getDate() < 10 ? "0" + date.getDate() : date.getDate()); dStr = dStr.replace("y", date.getFullYear()); jQuery("#dffs_" + fin).find("input:text").val(dStr); hour = date.getHours(); minute = date.getMinutes() - date.getMinutes() % 5; if(minute < 10){ minute = "0"+minute; } jQuery("#dffs_" + fin).find("select:first").val(hour); jQuery("#dffs_" + fin).find("select:last").val(minute); } function setDateFromRule(){ setDateFieldFromDateObject("DateColumn2",getDateFieldAsDateObject("DateColumn1"),7); }
Change “DateColumn1” and “DateColumn2” to match your fields.
Let me know how this works out.
Alexander
-
October 12, 2018 at 23:41 #22490
The Custom JS above works great with a very similar requirement we had: enter a single date and have 13 other date fields change to 13 different dates when form is saved.
Thanks Alexander.
-
October 2, 2020 at 03:09 #31803
Hi Alex!
I was able to get the following code to work in my SharePoint, which is awesome! However, I am looking to modify this to have the date populate to the next business day. For example, I have a rule set up to calculate the next Follow Up Date (field 1) based on the Initial Entry Date (field 2) and the value selected in the Follow Up Type field (field 3). Right now, this code works perfectly, except for the fact that it will set the Follow Up Date to a weekend. I still need it to add calendar days (do not want it to add business days) but want to have it set to populate the next business day if it happens to fall on a Sat or Sun.
Example:
{Initial Entry Date}+3
{Thu,10/1/2020} + 3 = Mon,10/5/2020 (instead of Sun, 10/4/2020}Any help is greatly appreciated!!!
-
October 4, 2020 at 16:31 #31811
Try something like this:
var theDate = new Date(); // use the date you get from the function instead of "new Date();" var weekday = theDate.getDay(); if(weekday === 6){ // Saturday theDate.setDate(theDate.getDate() + 2); } // Sunday if(weekday === 0){ theDate.setDate(theDate.getDate() + 1); } console.log(theDate);
Alexander
-
October 6, 2020 at 22:52 #31826
Thanks so much for your response! Where would I put that code? Would it replace a specific part of the code referenced previously? I am having a hard time figuring out where exactly to place the code within the snippet from 02/2018.
-
October 7, 2020 at 13:59 #31834
You are not supposed to modify the existing code – you must run this code after you have first used the existing code to get your date object back – then use this date as X in the “var theDate = X”.
Alexander
-
-
-
AuthorPosts
- You must be logged in to reply to this topic.