Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to convert date format "Day, Month Date, Year HH:SS AM to date/time

madhuabbaraju
Kilo Contributor

Hello all,

I have a requirement to read Sent: information in email body and convert it into date time value.

For example, Below is the value that comes in email body.

Sent: Friday, August 18, 2017 8:00 AM

I need to convert above info into date/time value i.e, MM-DD-YYYY HH:MM:SS format.

Appreciate any help with this.

Thanks

Mahduri

7 REPLIES 7

The SN Nerd
Giga Sage
Giga Sage

So, GlideDateTime can do everything except parsing the AM/PM and day.


This would be really easy if it wasn't for the AM/PM Timestamp!




function convert12HourTo24(time) {


  var hours = Number(time.match(/^(\d+)/)[1]);


  var minutes = Number(time.match(/:(\d+)/)[1]);


  var AMPM = time.match(/\s(.*)$/)[1];


  if(AMPM == "PM" && hours<12) hours = hours+12;


  if(AMPM == "AM" && hours==12) hours = hours-12;


  var sHours = hours.toString();


  var sMinutes = minutes.toString();


  if(hours<10) sHours = "0" + sHours;


  if(minutes<10) sMinutes = "0" + sMinutes;


  return sHours + ":" + sMinutes;


}



var testDate =   'Sent: Friday, August 18, 2017 8:00 AM';


//Remove Sent: and named day part, irelevant


var dateNoDay = testDate.substr(testDate.indexOf(", ") + 1); // August 18, 2017 8:00 AM;


//Convert to 24/7 time


var dateTime = dateNoDay.substr(dateNoDay.indexOf(":") - 1) ; //8:00 AM


var dateTime24 = convert12HourTo24(dateTime).trim(); //08:00


//Get first part


var firstPart = dateNoDay.substr(0,   dateNoDay.indexOf(":") - 1); //August 18, 2017


//Add 24 datet/time to the end


var newDate = firstPart.trim() + ' ' + dateTime24.trim(); // August 18, 2017 08:00



//Use GDT
var gdt = new GlideDateTime();


gdt.setDisplayValue(newDate, "MMMM dd, yyyy hh:mm");


var dateTimeForField = gdt.getDisplayValue(); //2017-08-18 08:00:00


current.u_datetime = dateTimeForField;



2017-08-18 08:00:00



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

Hi Paul,



Thanks for the reply.


Sorry Madhu - I worked it out. This is much cleaner!



var newDate =   'Friday, August 18, 2017 8:00 AM';


var gdt = new GlideDateTime();


gdt.setDisplayValue(newDate, "E, MMMM dd, yyyy K:mm a");


var dateTimeForField = gdt.getDisplayValue();


gs.print(dateTimeForField);


2017-08-18 08:00:00  



Please mark as correct/helpful



References:


SimpleDateFormat (Java Platform SE 7 )


http://wiki.servicenow.com/index.php?title=Scoped_GlideDateTime_API_Reference#gsc.tab=0



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022