When answering a customer's question about formatting dates in an ASP page to UTC, I created a couple of useful functions.
The customer needed to retrieve dates from the communication record in preparation for sending to an external scheduling system.
var commRecord = CRM.FindRecord("communication","comm_communicationid="+intRecordId);
var createddate = commRecord.ItemAsString("comm_createddate");
var startdatetime = commRecord.ItemAsString("comm_datetime");
var enddatetime = commRecord.ItemAsString("comm_todatetime");
Using the method itemAsString() to return the field's value from the record gave me a baseline.
function padNumber(num) {
return (num < 10 ? "0" : "") + num;
}
function convertToUTCDate(dateString) {
// Split date and time
var parts = dateString.split(" ");
var dateParts = parts[0].split("/");
var timeParts = parts[1].split(":");
// Extract components
var day = parseInt(dateParts[0], 10);
var month = parseInt(dateParts[1], 10) - 1; // JS months are 0-based
var year = parseInt(dateParts[2], 10);
var hours = parseInt(timeParts[0], 10);
var minutes = parseInt(timeParts[1], 10);
// Create local date object
var localDate = new Date(year, month, day, hours, minutes, 0);
// Convert to UTC
var utcYear = localDate.getUTCFullYear();
var utcMonth = padNumber(localDate.getUTCMonth() + 1);
var utcDay = padNumber(localDate.getUTCDate());
var utcHours = padNumber(localDate.getUTCHours());
var utcMinutes = padNumber(localDate.getUTCMinutes());
var utcSeconds = "00"; // ICS format includes seconds
// Return UTC format
return utcYear + utcMonth + utcDay + "T" + utcHours + utcMinutes + utcSeconds + "Z";
}
The padNumber() function manually pads numbers below 10.
The function can then be used like this:
Response.Write("Created Date Time ="+convertToICSDate(createddate)+"\r\n");
Response.Write("Start Date Time ="+convertToICSDate(startdatetime)+"\r\n");
Response.Write("End Date Time = "+convertToICSDate(enddatetime)+"\r\n");
I hope you find this useful.
