- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 05:04 AM - edited 11-22-2023 05:07 AM
Hi Team,
I have two fields( start date and end date ) with Date/Time Datatype and durationTime field with duration datatype.
Task:On change of end date ,calculate difference bet two dates and set duration with format days,hours,minutes,seconds. (ddd:HH:mm:ss)
I write script include with GlideAjax but it only calculate number of days.I want to calculate hours,minutes,seconds also.what changes I need to do in existing script?
Script Include:
var CalculateDate = Class.create();
CalculateDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {
calculateDatediff: function() {
var startDate = this.getParameter('sysparm_start_date');
var endDate = this.getParameter('sysparm_end_date');
var gdt1 = new GlideDateTime(startDate);
var gdt2 = new GlideDateTime(endDate);
var dur = GlideDateTime.subtract(gdt1, gdt2);
return dur.getDisplayValue();
// }
},
type: 'CalculateDate'
});
On change Client Script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var ga = new GlideAjax('CalculateDate'); // CalculateDate is the script include name
ga.addParam('sysparm_name', 'calculateDatediff'); // calculateDatediff is the function in the script include that we're calling
ga.addParam('sysparm_start_date', g_form.getValue('u_startdate')); // get start date
ga.addParam('sysparm_end_date', g_form.getValue('u_enddate')); // get end date
ga.getXMLAnswer(DateParse);
}
// callback function for returning the result from the script include
function DateParse(response) {
g_form.setValue('u_durationtime', response);
}
Thanks
Tejas
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 08:20 AM
Hi @Tejasr1
Let's use the API below, it will return the difference between the two dates in the format ddd hh:mm:ss.
dateDiff(String startDate, String endDate, Boolean numericValue)
String | If the numericValue parameter is true, returns the difference between the two dates as an integer number of seconds; if false, returns the difference between the two dates in the format ddd hh:mm:ss. |
Try the below adjustment.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) {
return;
}
if (newValue === '') {
g_form.clearValue('duration');
}
//Use this to convert from user to system format
//If your instance use system format only, just ignore it
var start_date = getDateFromFormat(g_form.getValue('u_startdate'), g_user_date_time_format);
var format_start_date = formatDate(new Date(start_date), "yyyy-MM-dd hh:mm:ss");
var end_date = getDateFromFormat(g_form.getValue('u_enddate'), g_user_date_time_format);
var format_end_date = formatDate(new Date(end_date), "yyyy-MM-dd hh:mm:ss");
var ga = new GlideAjax('CalculateDate');
ga.addParam('sysparm_name', 'calculateDatediff');
ga.addParam('sysparm_start_date', format_start_date);
ga.addParam('sysparm_end_date', format_end_date);
ga.getXMLAnswer(function(response) {
g_form.setValue('u_durationtime', response);
});
}
var CalculateDate = Class.create();
CalculateDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {
calculateDatediff: function() {
var start = this.getParameter('sysparm_start_date');
var end = this.getParameter('sysparm_end_date');
var duration = gs.dateDiff(start, end);
return duration;
},
type: 'CalculateDate'
});
Cheers,
Tai Vu

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 05:24 AM
Hi,
Please check below link:
Instead of using
var dur = GlideDateTime.subtract(gdt1, gdt2);
Use
var dur = gs.dateDiff(gdt1.getDisplayValueInternal(),gdt2.getDisplayValueInternal(),false);
Thanks
Anil Lande
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 05:40 AM
Hi @Tejasr1,
To get duration with format days, hours, minutes, seconds. (ddd:HH:mm:ss)
For example :
19683 Days 13 Hours 35 Minutes
Try the below script it may help you to achieve the format
var openedAt = current.sys_created_on; // start date
var closedAt = current.sys_updated_on; // end date
var diff = gs.dateDiff(openedAt, closedAt, true); // difference in milli seconds
var d = Math.floor(diff / (3600 * 24));
var h = Math.floor(diff % (3600 * 24) / 3600);
var m = Math.floor(diff % 3600 / 60);
var s = Math.floor(diff % 60);
var time = d+' Days '+h+' hours '+m+' min '+s+'seconds';
gs.print(time);
If my response helps you to resolve the issue close the question by Accepting solution and hit thumb icon. From Correct answers others will get benefited in future.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 08:20 AM
Hi @Tejasr1
Let's use the API below, it will return the difference between the two dates in the format ddd hh:mm:ss.
dateDiff(String startDate, String endDate, Boolean numericValue)
String | If the numericValue parameter is true, returns the difference between the two dates as an integer number of seconds; if false, returns the difference between the two dates in the format ddd hh:mm:ss. |
Try the below adjustment.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) {
return;
}
if (newValue === '') {
g_form.clearValue('duration');
}
//Use this to convert from user to system format
//If your instance use system format only, just ignore it
var start_date = getDateFromFormat(g_form.getValue('u_startdate'), g_user_date_time_format);
var format_start_date = formatDate(new Date(start_date), "yyyy-MM-dd hh:mm:ss");
var end_date = getDateFromFormat(g_form.getValue('u_enddate'), g_user_date_time_format);
var format_end_date = formatDate(new Date(end_date), "yyyy-MM-dd hh:mm:ss");
var ga = new GlideAjax('CalculateDate');
ga.addParam('sysparm_name', 'calculateDatediff');
ga.addParam('sysparm_start_date', format_start_date);
ga.addParam('sysparm_end_date', format_end_date);
ga.getXMLAnswer(function(response) {
g_form.setValue('u_durationtime', response);
});
}
var CalculateDate = Class.create();
CalculateDate.prototype = Object.extendsObject(AbstractAjaxProcessor, {
calculateDatediff: function() {
var start = this.getParameter('sysparm_start_date');
var end = this.getParameter('sysparm_end_date');
var duration = gs.dateDiff(start, end);
return duration;
},
type: 'CalculateDate'
});
Cheers,
Tai Vu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2023 10:30 PM
It's Working.
Thanks @Tai Vu