We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Convert Selected Date time format into custom format.

Vamshi Krishna2
Tera Contributor

Hi,

when I select the start date from the catalog variable I want to convert it into a custom format in a new variable. 

For example, if the start date is 22/01/2023 11:36:52, I want to convert it to 22/JAN/2023 11:36.

But when I use the below code it's not working. or any simple way to do it

 

Client Script:

var st = g_form.getValue('start_date_time');
var ajax = new GlideAjax('Test');
ajax.addParam('sysparm_name','getstartdate');
ajax.addParam('sysparm_startDate', st);
ajax.getXML(getResponse);
function getResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var month_name = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
var month_number = parseInt(answer.substring(3, 5));

var curr_month = month_name[month_number - 1];

var str1 = answer.substring(0, 3);
var str2 = answer.substring(5, 16);
var dt = str1 + curr_month.toString() + str2;
g_form.setValue('planned_start_time', dt);
}

Script Include:

getstartdate : function() {

var gdt = new GlideDateTime(this.getParameter('sysparm_startDate'));
var gtime1 = new GlideTime();
gtime1.setValue("00:00:00");
gdt.subtract(gtime1);
var gtime2 = gdt.getTime();
var tdg = gdt.getDate();
tdg = tdg.getByFormat('dd/MM/yyyy');
var di = gtime2.getByFormat('hh:mm:ss');
return tdg + " " + di;
},

1 ACCEPTED SOLUTION

-O-
Kilo Patron

This is what I would do:

- Script Include:

 

var GlideDateTimeAjax = Class.create();

GlideDateTimeAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

	'customFormatDateTime': function GlideDateTimeAjax$customFormatDateTime () {
		var gdt = new GlideDateTime(),
			unixEpochMilliseconds = +this.getValue();

		gdt.setNumericValue(unixEpochMilliseconds);

		var localDate = gdt.getLocalDate().getByFormat('yyyy/MMM/dd'),
			localTime = gdt.getLocalTime().getByFormat('HH:mm');

		return localDate + ' ' + localTime;
	},

	'type': 'GlideDateTimeAjax',

});

 

- Client Script:

 

var unixEpochMilliseconds = getDateFromFormat(g_form.getValue('start_date_time'), g_user_date_time_format);
var gx = new GlideAjax('GlideDateTimeAjax');

gx.addParam('sysparm_name', 'customFormatDateTime');
gx.addParam('sysparm_value', unixEpochMilliseconds);

gx.getXMLAnswer(function (answer) {
	g_form.setValue('planned_start_time', answer);
});

 

View solution in original post

14 REPLIES 14

Hi,
Before setting this value, please check if you are getting this from script include for that please put a alert for the answer variable.

 

 


Thanks and Regards,

Saurabh Gupta

Hi @Vamshi Krishna2 

 

Please change you script as below 

 

Script Include

 

Script Include:

getstartdate : function() {

var gdt = new GlideDateTime(this.getParameter('sysparm_startDate'));
var gtime2 = gdt.getTime();
var tdg = gdt.getDate();
tdg = tdg.getByFormat('dd/MMM/yyyy');
var di = gtime2.getByFormat('hh:mm');
return tdg + " " + di;
},

 

Client Script

var st = g_form.getValue('start_date_time');//please make sure you variable backend names are correct
var ajax = new GlideAjax('Test');
ajax.addParam('sysparm_name','getstartdate');
ajax.addParam('sysparm_startDate', st);
ajax.getXML(getResponse);
function getResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
g_form.setValue('planned_start_time', answer);//please make sure you variable backend names are correct
}

Thanks and Regards,

Saurabh Gupta

Hi, Saurabh thank you so much this worked but the timing was showing a difference as below. It is not exactly same as start date time. but instead it was showing 12:00

VamshiKrishna2_0-1674377700449.png

 

Share your script include screenshot 


Thanks and Regards,

Saurabh Gupta

Run below code in background script, it is working fine. 

var dt="2023-01-22 15:52:12";
var gdt = new GlideDateTime(dt);
gs.info(gdt)
var gtime2 = gdt.getTime();
var tdg = gdt.getDate();
tdg = tdg.getByFormat('dd/MMM/yyyy');
var di = gtime2.getByFormat('HH:mm');
gs.info( tdg + " " + di);

 
Please check what value you are sending as input from client side, put alert to check that.


Thanks and Regards,

Saurabh Gupta