- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-10-2024 03:43 AM - edited ‎07-10-2024 05:51 AM
Hi folks,
I have start and end date variable in catalog item form...I have created duration field which calculates the duration between start and end date in hours..I have developed that using script include and client script but now the client wants to include time in hours and minutes as well like if we select start date as 9 AM to end date 10:30 AM it should give 1 hour 30 minutes.Currently its giving only 1 Hour... please let me know the changes in script to achieve this @Ankur Bawiskar @Anil Lande @suvro @HrishabhKumar
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-10-2024 04:02 AM
@Priyanka Chaud1 Please update your script include as follows.
var durationcalculation = Class.create();
durationcalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
fetchDate: function() {
var getStartDate = this.getParameter('sysparm_end1');
var getEndDate = this.getParameter('sysparm_end');
var start = new GlideDateTime(getStartDate);
var end = new GlideDateTime(getEndDate);
var hours=GlideDateTime.subtract(start, end);
return hours.getDisplayValue(); //retunrs value like 3 Hours 40 Minutes
},
type: 'durationcalculation'
});
Please update your client script as follows.
var startDate = g_form.getValue('outage_start_date_time');
var endDate = g_form.getValue('outage_end_date_time');
if(startDate=='' && newValue!=''){
g_form.addErrorMessage('Please fill in start date first');
g_form.clearValue('outage_end_date_time');
}
if (new Date(startDate) > new Date(endDate)) {
g_form.addErrorMessage('End date/time should be later than start date/time');
g_form.clearValue('outage_end_date_time');
}
var gaPhone = new GlideAjax('durationcalculation');
gaPhone.addParam('sysparm_name', 'fetchDate');
gaPhone.addParam('sysparm_end1', g_form.getValue('outage_start_date_time'));
gaPhone.addParam('sysparm_end', g_form.getValue('outage_end_date_time'));
gaPhone.getXMLAnswer(_handleResponse);
function _handleResponse(response) {
var answer = response;
g_form.setValue('duration', answer);
}
Hope this helps.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-10-2024 03:47 AM
Hi @Priyanka Chaud1,
script include:
var durationcalculation = Class.create();
durationcalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
fetchDate: function() {
var getStartDate = this.getParameter('sysparm_end1');
var getEndDate = this.getParameter('sysparm_end');
var start = new GlideDateTime(getStartDate);
var end = new GlideDateTime(getEndDate);
// Calculate duration in milliseconds
var durationMs = start.subtract(end).getNumericValue();
// Convert duration to hours and minutes
var hours = Math.floor(durationMs / (1000 * 60 * 60));
var minutes = Math.floor((durationMs % (1000 * 60 * 60)) / (1000 * 60));
return hours + ' hours ' + minutes + ' minutes';
},
type: 'durationcalculation'
});
Client Script:
var startDate = g_form.getValue('outage_start_date_time');
var endDate = g_form.getValue('outage_end_date_time');
if (startDate == '' && endDate != '') {
g_form.addErrorMessage('Please fill in start date first');
g_form.clearValue('outage_end_date_time');
return;
}
if (new Date(startDate) > new Date(endDate)) {
g_form.addErrorMessage('End date/time should be later than start date/time');
g_form.clearValue('outage_end_date_time');
return;
}
var gaPhone = new GlideAjax('durationcalculation');
gaPhone.addParam('sysparm_name', 'fetchDate');
gaPhone.addParam('sysparm_end1', g_form.getValue('outage_start_date_time'));
gaPhone.addParam('sysparm_end', g_form.getValue('outage_end_date_time'));
gaPhone.getXMLAnswer(_handleResponse);
function _handleResponse(response) {
var answer = response;
g_form.setValue('duration', answer);
}
Thank you, please make helpful if you accept the solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-10-2024 05:50 AM
Thanks for the reply @Yashsvi but i tried this is not working

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-10-2024 04:02 AM
@Priyanka Chaud1 Please update your script include as follows.
var durationcalculation = Class.create();
durationcalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
fetchDate: function() {
var getStartDate = this.getParameter('sysparm_end1');
var getEndDate = this.getParameter('sysparm_end');
var start = new GlideDateTime(getStartDate);
var end = new GlideDateTime(getEndDate);
var hours=GlideDateTime.subtract(start, end);
return hours.getDisplayValue(); //retunrs value like 3 Hours 40 Minutes
},
type: 'durationcalculation'
});
Please update your client script as follows.
var startDate = g_form.getValue('outage_start_date_time');
var endDate = g_form.getValue('outage_end_date_time');
if(startDate=='' && newValue!=''){
g_form.addErrorMessage('Please fill in start date first');
g_form.clearValue('outage_end_date_time');
}
if (new Date(startDate) > new Date(endDate)) {
g_form.addErrorMessage('End date/time should be later than start date/time');
g_form.clearValue('outage_end_date_time');
}
var gaPhone = new GlideAjax('durationcalculation');
gaPhone.addParam('sysparm_name', 'fetchDate');
gaPhone.addParam('sysparm_end1', g_form.getValue('outage_start_date_time'));
gaPhone.addParam('sysparm_end', g_form.getValue('outage_end_date_time'));
gaPhone.getXMLAnswer(_handleResponse);
function _handleResponse(response) {
var answer = response;
g_form.setValue('duration', answer);
}
Hope this helps.