How to convert a JSON string into a date format

Aditya Banka2
Tera Guru

Hello Experts,

 

I am running a REST API call and getting a response where I am able to parse the responsebody.

 

Below is the sample JSON response.

{
"results": {
"systemCount": 1,
"totalSystemsCount": "1",
"systemDetails": [
        {
          "osVersion": "9.11.1P5",
           "model": "FAS2750",
           "shipmentDate": "Fri Jan 28 00:00:00 PST 2022",
           "transportMethod": "https",
           "sspContractEndDate": "Sun Jan 31 08:00:00 PST 2027",
            "latestAsupID": "2023050300000209",
             "product": "Filer"
         }
     ]
    }

}

My requirement is to fetch the shipmentDate & sspContractEndDate field value's and convert them into glide_date_time / glide_date format and update the value into alm_hardware table.

 

"Fri Jan 28 00:00:00 PST 2022" the format looks quite different and I am not able to convert this into a date object using the GlideDateTime() function.

 

Please let me know how to convert this into a proper date format.

1 ACCEPTED SOLUTION

Bert_c1
Kilo Patron

Parse the two values, getting the year,day,month,time_of_day, and timezone.  then build a string in the format:

2023-05-02 01:25:49.  Must adjust for PST, and some "helper" methods are here:

 

https://developer.servicenow.com/dev.do#!/reference/api/utah/server_legacy/c_GlideDateTimeAPI?navFil...

 

One example there has:

 

This instantiates a GlideDateTime object using the yyyy-MM-dd'T'HH:mm:ss.SSSZ format.

 

 

 

var start = new GlideDateTime("2014-07-04T12:08:56.235-0700");
var end = new GlideDateTime(start);
gs.info(end);

 

 

 

Other Community members may have a different suggestion.

 

Here's some logic if you go my suggested route:

 

 

var dateStr = "Fri Jan 28 00:00:00 PST 2022";
var mStr = dateStr.substr(4,3);
var dStr = dateStr.substr(8,2);
var tStr = dateStr.substr(11,8);
var tzStr = dateStr.substr(20,3);
var yStr = dateStr.substr(24,4);
gs.info(mStr + "-" + dStr + "-" + yStr + " " + tStr + " " + tzStr);

// Now build GlideDateTime value
var mVal = "";
switch(mStr) {
	case 'Jan':
	mVal = "01";
	break;
	case 'Feb':
	mVal = "02";
	break;
	case 'Mar':
	mVal = "03";
	break;
	case 'Apr':
	mVal = "04";
	break;
	case 'May':
	mVal = "05";
	break;
	case 'Jun':
	mVal = "06";
	break;
	case 'Jul':
	mVal = "07";
	break;
	// ...
	default:
	mVal = "00"
}

var tzOffSet = "";
switch (tzStr) {
	case 'EDT':
	tzOffset = "0400";
	break;
	case 'EST':
	tzOffset = "0500";
	break;
	case 'CDT':
	tzOffset = "0500";
	break;
	case 'CST':
	tzOffset = "0600";
	break;
	case 'MDT':
	tzOffset = "0600";
	break;
	case 'MST':
	tzOffset = "0700";
	break;
	case 'PDT':
	tzOffset = "0700";
	break;
	case 'PST':
	tzOffset = "0800";
	break;
	default:
	tzOffset = "0000";
}

var gdtStr = yStr + "-"+ mVal + "-" + dStr + "T" + tStr + ".000-" + tzOffset;
gs.info('gdtStr = ' + gdtStr);
var gdt = new GlideDateTime(gdtStr);
gs.info("gdt = " + gdt);

 

which gives:

 

*** Script: Jan-28-2022 00:00:00 PST
*** Script: gdtStr = 2022-01-28T00:00:00.000-0800
*** Script: gdt = 2022-01-28 08:00:00

 

 

View solution in original post

2 REPLIES 2

Bert_c1
Kilo Patron

Parse the two values, getting the year,day,month,time_of_day, and timezone.  then build a string in the format:

2023-05-02 01:25:49.  Must adjust for PST, and some "helper" methods are here:

 

https://developer.servicenow.com/dev.do#!/reference/api/utah/server_legacy/c_GlideDateTimeAPI?navFil...

 

One example there has:

 

This instantiates a GlideDateTime object using the yyyy-MM-dd'T'HH:mm:ss.SSSZ format.

 

 

 

var start = new GlideDateTime("2014-07-04T12:08:56.235-0700");
var end = new GlideDateTime(start);
gs.info(end);

 

 

 

Other Community members may have a different suggestion.

 

Here's some logic if you go my suggested route:

 

 

var dateStr = "Fri Jan 28 00:00:00 PST 2022";
var mStr = dateStr.substr(4,3);
var dStr = dateStr.substr(8,2);
var tStr = dateStr.substr(11,8);
var tzStr = dateStr.substr(20,3);
var yStr = dateStr.substr(24,4);
gs.info(mStr + "-" + dStr + "-" + yStr + " " + tStr + " " + tzStr);

// Now build GlideDateTime value
var mVal = "";
switch(mStr) {
	case 'Jan':
	mVal = "01";
	break;
	case 'Feb':
	mVal = "02";
	break;
	case 'Mar':
	mVal = "03";
	break;
	case 'Apr':
	mVal = "04";
	break;
	case 'May':
	mVal = "05";
	break;
	case 'Jun':
	mVal = "06";
	break;
	case 'Jul':
	mVal = "07";
	break;
	// ...
	default:
	mVal = "00"
}

var tzOffSet = "";
switch (tzStr) {
	case 'EDT':
	tzOffset = "0400";
	break;
	case 'EST':
	tzOffset = "0500";
	break;
	case 'CDT':
	tzOffset = "0500";
	break;
	case 'CST':
	tzOffset = "0600";
	break;
	case 'MDT':
	tzOffset = "0600";
	break;
	case 'MST':
	tzOffset = "0700";
	break;
	case 'PDT':
	tzOffset = "0700";
	break;
	case 'PST':
	tzOffset = "0800";
	break;
	default:
	tzOffset = "0000";
}

var gdtStr = yStr + "-"+ mVal + "-" + dStr + "T" + tStr + ".000-" + tzOffset;
gs.info('gdtStr = ' + gdtStr);
var gdt = new GlideDateTime(gdtStr);
gs.info("gdt = " + gdt);

 

which gives:

 

*** Script: Jan-28-2022 00:00:00 PST
*** Script: gdtStr = 2022-01-28T00:00:00.000-0800
*** Script: gdt = 2022-01-28 08:00:00

 

 

Aditya Banka2
Tera Guru

Hello Bert,

 

Thank you, I have followed your suggested route which helped in achieving the expected result.