Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Update Jira Product Discovery date range to be more specific as date gets closer

jkoch
Contributor
May 21, 2026

I have a tricky problem I'm trying to solve with Jira Product Discovery dates. 

We have a JPD roadmap displayed on our public website. Right now, it includes basic information about upcoming product launches and when they will be available. We have been asked to add more detail to the roadmap for when preview access and cand other pre-launch milestones or information will be available. I would like to have these dates display as a range first and get more specific as the date approaches so we don't share our planned date with customers too early, only for it to change. 

i.e.,

  • If the date is more than 6 months away, display the quarter
  • If the date is more than 3 months away, display the month
  • If the date is 3 months away or less, the exact date can be shown

 

I'm not sure if this is possible or if it would be less work to just update the dates manually. 

 


Here's my setup: 

  • Products are tracked as ideas in JPD with linked delivery tickets (Epic with children) in Jira Software
  • The dates for the Preview access (and other key dates) are tracked in the delivery tickets. 

 

Because these are key dates that everyone needs to know, I have an automation in Jira Software that makes the Preview date (and other key dates) available in the parent Epic (and then it copies the date to all the children as well). It works as follows:

  • When Due Date changes on a ticket called "Preview," copy the date to the Preview field on the parent Epic. 

I don't want to maintain my dates in multiple places, so I would like the date listed on the Epic to be the source of truth for the JPD field. 

First, I tried to autofill the Preview JPD field from the Preview field on the delivery tickets. (Configure autofill dates). 

jpd_autofill.png

I'm not sure why, but I couldn't get this to work with the custom date field I chose. I could only get dates to populate via autofill when I selected system date fields, Start Date and Due Date. 

 

My next solution was to trigger the date field to update in JPD when the date changes on the delivery tickets. This was a success! Here's how that works: 

  • The automation looks for updates to the Preview field on the Epic
  • A variable is created for that date
  • The custom field in JPD is updated as follows:
{

"fields": {

"customfield_12856":"{\"start\":\"{{productPreviewDate}}\",\"end\":\"{{productPreviewDate}}\"}"

}

}

Here's a screenshot of the automation: 

jpd_previewdate_automation.png

(Credit to this video by Robert DaSilva for tips on formatting: Dates, Automation, and Jira Product Discovery)

 

Now that I have the dates in Jira Product Discovery, I'm stuck. As I mentioned in my intro, I would really like to have some "masking" on the dates so we're getting more specific as the date approaches. Is it possible to do this via automation? What would that look like? 

Side note: I have the Smartsheet + Jira connector, so I've considered using that to do the date calculations and then push the correct ranges back into JPD, but I can't think of how to make it work without having a set of super long formulas. Because of the date format from JPD, I'm also having trouble isolating the date in a way that Smartsheet will recognize as a date. (That's more of a Smartsheet problem, but I wanted to share everything I've tried!)

Here's a screenshot showing the isolated date value and the MONTH function throwing an error:

jpd_smartsheet_data_sync.png

Any ideas on how I can make this work? Am I wasting my time? Thank you for any advice or ideas you might have!

 

2 answers

1 accepted

3 votes
Answer accepted
Bill Sheboy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Champions.
May 21, 2026

Hi @jkoch 

When you cannot get the roadmap / dashboarding to display the view information you want, altering the JPD date field's values could do it.

 

There is some implied behavior based upon the values in the JSON as text stored for a value:

  • a single date selection / display -- the same date is in both start and end values
"customfield_10107""{\"start\":\"2026-07-22\",\"end\":\"2026-07-22\"}"
  • a month selection / display -- the first day of the month is in start and the last day is in end 
"customfield_10107""{\"start\":\"2025-07-01\",\"end\":\"2025-07-31\"}"
  • a range of months selection / display -- the first day of the first month is in start and the last day of the last month is in end 
"customfield_10107""{\"start\":\"2025-07-01\",\"end\":\"2025-09-30\"}"

 

Thus, if you can determine when to make the change with your rule trigger / work item relative to {{now}} the values could be adjusted as needed.

To reduce the risk of errors, perhaps consider preserving the original field value and using a separate one for display purposes, editing it as needed over time.

 

Kind regards,
Bill

jkoch
Contributor
May 26, 2026

@Bill Sheboy, that's exactly what I had in mind! 

Thus, if you can determine when to make the change with your rule trigger / work item relative to {{now}} the values could be adjusted as needed.

It's just this part that I can't seem to figure out. That, and writing out the JSON to include all of the possible display options for a given date! 

Bill Sheboy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Champions.
May 26, 2026

@jkoch -- You may start with the date / time diff() function with months units, and use some way to detect when the field needs updates.  (e.g., the Due Date changes, time passes, etc.)

But first, something I note in the images for the custom field: it is automatically calculated based upon other data.  That needs to be removed as an automation rule would set the value instead.

 

Let's add some assumptions and approach ideas.  I think you will need one or two rules based upon:

  • WHEN the Due Date field changes THEN update the JPD displayed custom field relative to {{now}}
  • EVERY n-time units (e.g., monthly) THEN update the JPD displayed custom field relative to {{now}}
  • for the THEN parts...
    • use {{issue.duedate.diff(now).months}} in condition steps or conditional expressions to decide which format to use, and format it accordingly...

 

As an example, the single-date value would be this, using the jiraDate format on the Due Date:

"{\"start\":\"{{issue.duedate.jiraDate}}\",\"end\":\"{{issue.duedate.jiraDate}}\"}"

The month-date value would add the startOfMonth and endOfMonth functions:

"{\"start\":\"{{issue.duedate.startOfMonth.jiraDate}}\",\"end\":\"{{issue.duedate.endOfMonth.jiraDate}}\"}"

 

The quarterly / multiple-month range is more challenging, and depends upon how your team defines quarterly alignment.  For calendar-aligned quarters, you could use the format() function with {{issue.duedate.format("q")}} and then use various means to get the JPD date expression: conditional logic expression, lookup table, variables, etc., which will take several steps. Such as:

  • create a variable for the starting month number, naming that varStartMonth 
{{#=}}({{issue.duedate.format("q")}} - 1) * 3 + 1{{/}}
  • create a variable for the ending month number, naming that varEndMonth 
{{#=}}{{varStartMonth}} + 2{{/}}
  • use those to get the dates for start / end of the quarterly range
{{issue.duedate.withMonth(varStartMonth.asNumber).startOfMonth.jiraDate}}

{{issue.duedate.withMonth(varEndMonth.asNumber).endOfMonth.jiraDate}}
  • add them to the JSON text for the date

Theoretically, that can all be combined into one expression, although it will be harder to debug / maintain.

 

I recommend trying the various methods and if you run into challenges, please post here so the community can help.

Like Steffen Opel _Utoolity_ likes this
jkoch
Contributor
May 27, 2026

@Bill Sheboy

I was able to set up an automation to get the date copied over from Jira Cloud to Jira Product Discovery as intended. I didn't see your response until this morning, but I really like the Q formatting (i.e., ({{issue.duedate.format("q")}). I didn't know that was an option, but it's more elegant than my current setup. I like the way you suggested to parse out Q start and end as well. I'll give that a try. Thank you!

And as you mentioned, I still need to create another rule to get Jira to check the date and update the range as the date approaches, but I'm happy I got the first half working. 

Here's the updated automation as of now:

The first few items here are just recording values to the audit log so I have a good reference point for the data directly in the log. 

jpd_preview_flow_01.png

In the above screenshot, you can see the first variable: {{productDaysUntilPreview}}, which uses the following smart value:

{{today().diff(issue.customfield_12350).days()}} 

Then I created the rest of the variables that I will need later in the flow.  

jpd_preview_flow_02.png

{{productPreviewMonth}} returns the numerical month for the date (e.g., January =1)

{{issue.customfield_12350.monthOfYear()}}

jpd_preview_flow_04.png

{{productPreviewMonthStart}} and {{productPreviewMonthEnd}} give me the start and end dates for the given month.

{{issue.customfield_12350.startOfMonth()}}
{{issue.customfield_12350.endOfMonth()}}

{{productPreviewDate}} is just the specific date as a JSON object.

{{issue.customfield_12350}}

Here's how I handled the quarter start and end dates before seeing your reply:

jpd_preview_flow_03.png

I won't paste every single smart value, but here's Q1:

{{productPreviewFirstQStart}}

{{issue.customfield_12350.startOfMonth.withMonth(1)}}

{{productPreviewFirstQEnd}}

{{issue.customfield_12350.endOfMonth.withMonth(3)}}

These variables give me the right quarter start and end dates for the year of the given date. 

 

Now that all my variables are created, I can get into my IF conditional path. 

Starting with the largest range, I check if  {productDaysUntilPreview}} is >90 AND {{productPreviewMonth}}  is <4 (i.e., Q1)

jpd_preview_flow_05_q1.png

If that passes, I edit the JPD target date field accordingly:

{
"fields": {
"customfield_12856":"{\"start\":\"{{productPreviewFirstQStart}}\",\"end\":\"{{productPreviewFirstQEnd}}\"}"
}
}

Q2–4 follow the same pattern:

Q2:

jpd_preview_flow_06_q2.png

Q3:

jpd_preview_flow_07_q3.png

Q4: 

jpd_preview_flow_08_q4.png

Now that we've covered all the possible Qs, we check if {productDaysUntilPreview}}  is >30. If so, we want to update the target JPD field to display the month. 

jpd_preview_flow_09_m.png

{
"fields": {
"customfield_12856":"{\"start\":\"{{productPreviewMonthStart}}\",\"end\":\"{{productPreviewMonthEnd}}\"}"
}
}

 

Finally, if {productDaysUntilPreview}} is <31, we can update the target JPD field to display the specific date. 

jpd_preview_flow_10_actual.png

{
"fields": {
"customfield_12856":"{\"start\":\"{{productPreviewDate}}\",\"end\":\"{{productPreviewDate}}\"}"
}
}

 


I'm open to suggestions to simplify or improve the flow! I'm somewhat new to Jira automations, so there is a lot I don't know. Thank you again for your thorough reply and suggestions! 

 


Edit: Fixed variables in the final IF/ELSE path

Like Bill Sheboy likes this
Bill Sheboy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Champions.
May 27, 2026

@jkoch -- Well done!  Experimentation is a key to success for automation rules :^)

Three things I noticed in your smart value expressions...

#1) If the function today() works, that is likely an undocumented feature...and I recommend not using it.  Instead, please use nowhttps://support.atlassian.com/cloud-automation/docs/jira-smart-values-date-and-time/#Current-date-and-time---now--

 

#2) When you do something like this for productPreviewFirstQEnd:

{{issue.customfield_12350.endOfMonth.withMonth(3)}}

Selecting the endOfMonth before the withMonth(3) may cause a problem when the current month and March (i.e., withMonth(3)) have a different number of total days.  Instead, please use withMonth(3) before the endOfMonth function:

{{issue.customfield_12350.withMonth(3).endOfMonth}}

 

#3) Smart values are name, spacing, and case-sensitive...and, as rule writers we can accidentally pick variable names which collide with built-in smart values...now, and in the future.  Thus, I recommend adding a prefix to variable names to reduce the chance of collisions.  For example, varProductReviewFirstQEnd.

 

Like # people like this
jkoch
Contributor
May 27, 2026

@Bill Sheboy  thank you for all the feedback! 

#1) If the function today() works, that is likely an undocumented feature...and I recommend not using it.  Instead, please use now

Thank you for the recommendation! For that one, I copied it directly from the datetime formatting options in the Smart Values picker, but now I see that now() is the option right above what I chose. 

 today() vs now().png

I swapped today() to now() just to be safe. 

 now() varproductDaysUntilPreview.png

{{now().diff(issue.customfield_12350).days()}}
 

 


 

#2) When you do something like this for productPreviewFirstQEnd:


{{issue.customfield_12350.endOfMonth.withMonth(3)}}


Selecting the endOfMonth before the withMonth(3) may cause a problem when the current month and March (i.e., withMonth(3)) have a different number of total days.  Instead, please use withMonth(3) before the endOfMonth function:

{{issue.customfield_12350.withMonth(3).endOfMonth}}

THANK YOU! I couldn't figure out why the last day of March was returning 2026-03-30 in one of my tests yesterday, and I'm sure this is the reason.

 endOfMonth_q1.png

I didn't realize you could swap the order of the functions, so this is great. (Like I said, I'm very new to Jira automations!) Fixed!

 


 

#3) Smart values are name, spacing, and case-sensitive...and, as rule writers we can accidentally pick variable names which collide with built-in smart values...now, and in the future.  Thus, I recommend adding a prefix to variable names to reduce the chance of collisions.  For example, varProductReviewFirstQEnd.

Good tip! I'll go back through my variables and update to future proof them a bit more. 

 

 

Thank you again for all of your help and advice! I'll report back once I get the next part going. 

Like Bill Sheboy likes this
Bill Sheboy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Champions.
May 27, 2026

Sounds good, and...FYI for the built-in smart value information from the { } icon at the right-side of the fields:

My understanding is part of that info is static (i.e., human-written or "borrowed" from other tool docs) and part might be automagically generated based upon the project / space context.  I am guessing the today() reference came from someone typing it in based on using other tools / languages.  Testing shows:

  • {{now}} returns the date / time value for "now" in UTC+00:00
  • {{today}} returns the date value only, probably in UTC; it automagically converts to a date / time when used inline in smart value expressions

 

When uncertain about a smart value or custom field ID which rules can access I recommend using this how-to article.  The basic steps are:

  1. use your Jira URL in a browser tab to call a REST API endpoint with an example work item
  2. search on the page for your field, such as with Control-F (Find)
  3. note the smart value and custom field ID, and...
  4. if they are missing, the field is likely not supported by rules

 

Like jkoch likes this
jkoch
Contributor
May 27, 2026

@Bill Sheboy, amazing! You are a wealth of information. Thanks for sharing!!

jkoch
Contributor
June 16, 2026

Hi @Bill Sheboy, I'm back with an update to my date automations! I have the daily check automation implemented after some trial and error. 

I am using a scheduled daily trigger that uses a JQL search and conditions. I only need this to run on relevant tickets, so I'm hoping the conditions keep this from bogging down the system. (Though, it's at 1:00 a.m., so there should be very little usage at that time regardless.)

 JPD-Daily-01.png

Next, I have all the same log actions and smart variables as I use in the initial automation described in the thread above, so I'm not going to go into detail again here. 

JPD-Daily-02.png

Then, I use the same IF/ELSE block to check how close we are to the Preview date and update the JPD date with the appropriate range. This is also exactly the same as the initial automation. 

JPD-Daily-03.png

 

I'm open to any and all suggestions, questions, etc.! 

Bill Sheboy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Champions.
June 16, 2026

Thanks for the rule images, @jkoch 

For the rule trigger, I recommend moving conditions directly to the JQL (when possible) to make the rule more efficient.

And, as this rule runs daily you may want to use an additional condition inside the branches to check when an update is needed.  That is, only perform the edit when necessary.  This will reduce "noise" in the work item histories from changing to the same value repeatedly...and when the rule has no updates to make, it usually does not count toward monthly rule usage.

Finally...after your testing, is the rule working as expected?

0 votes
Jens Schumacher - Released_so
Community Champion
May 27, 2026

@jkoch Out of interest, how are you embedding the roadmap in your website? 

 

jkoch
Contributor
May 27, 2026

Hi @Jens Schumacher - Released_so ! 

I published the view so it's accessible by anyone:

jpd_publish_view.png

Then I worked with my web dev team to embed the view via iframe on the website. 

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events