converting milliseconds into proper time format

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-09-2015 08:56 AM
Any idea on how to convert the millisecond value into hrs min and sec format using client script?
5 REPLIES 5
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎12-31-2024 08:30 AM
In my scenario i had to get the lastLogon ticks from Active Directory and store it in the u_description field in sys_user and this is what i ended up with. this is intended for a transform map.
answer = (function transformEntry(source) {
/**
* Script to convert the 'lastLogon' timestamp from Active Directory (stored in ticks)
* into a human-readable date format and update the 'description' field of a sys_user record.
*
* If the 'description' field already contains the last logon information, the new timestamp
* will not be added again. If there is no existing last logon information, the script will
* append the new logon information to the 'description' field.
*
* The script performs the following tasks:
* 1. Retrieves the 'lastLogon' timestamp (in ticks) from Active Directory data.
* 2. Converts the ticks into milliseconds (Unix timestamp).
* 3. Creates a GlideDateTime object to format the timestamp.
* 4. Checks if the 'description' field already contains the same logon information.
* 5. If not, appends the formatted logon information to the 'description' field.
*
* Assumptions:
* - The 'lastLogon' value is stored in the 'u_lastlogon' field in the incoming data (e.g., from AD).
* - The 'description' field exists on the target sys_user record.
*
* Author: [Robert Österberg]
* Date: [2025-01]
*/
// Add your code here
// Constants for ticks conversion
var TICKS_IN_MILLISECOND = 10000; // 1 tick = 100 nanoseconds = 0.0001 milliseconds
var WINDOWS_EPOCH = 116444736000000000; // Windows epoch (January 1, 1970)
// Get the value of the lastLogon field from the imported Active Directory data
var lastLogonTicks = source.u_lastlogon; // Assuming 'u_lastlogon' is the field from AD
//var lastLogonTicks = 133801265253673148;
// Check if lastLogonTicks is undefined or null
if (lastLogonTicks == undefined || lastLogonTicks == null) {
gs.error('lastLogon field is empty or not present. Value: ' + lastLogonTicks);
return;
}
// Log the raw ticks value for debugging purposes
gs.info('Raw lastLogon (Ticks): ' + lastLogonTicks);
// Convert the ticks to milliseconds (Windows FileTime to Unix epoch)
var milliseconds = (lastLogonTicks - WINDOWS_EPOCH) / TICKS_IN_MILLISECOND;
// Log the milliseconds value to check if the conversion is correct
gs.info('Converted milliseconds: ' + milliseconds);
// Check if the milliseconds value is valid
if (isNaN(milliseconds) || milliseconds <= 0) {
gs.error('Invalid lastLogon timestamp: ' + lastLogonTicks + ' or conversion failed.');
return;
}
// Round milliseconds to ensure it's an integer (remove fractional part)
milliseconds = Math.floor(milliseconds); // Rounds down the value to the nearest integer
// Log the rounded milliseconds value for confirmation
gs.info('Rounded milliseconds value for GlideDateTime: ' + milliseconds);
// Attempt to create a GlideDateTime object using the milliseconds value
try {
// Attempt using the milliseconds value in the Unix epoch format
var glideDateTime = new GlideDateTime();
glideDateTime.setValue(milliseconds); // Setting value using Unix milliseconds format
gs.info('GlideDateTime created successfully using milliseconds: ' + glideDateTime.getValue());
} catch (e) {
gs.error('Failed to create GlideDateTime using milliseconds: ' + e);
return;
}
// Check if GlideDateTime is successfully created
if (!glideDateTime) {
gs.error('Failed to create a valid GlideDateTime object.');
return;
}
// Log the GlideDateTime object value (this should be in UTC format)
gs.info('GlideDateTime value: ' + glideDateTime.getValue());
// Format the date as a human-readable string
var formattedDate = glideDateTime.getDisplayValue(); // Adjust this for your desired format
// Log the formatted date for debugging purposes
gs.info('Formatted lastLogon date: ' + formattedDate);
// Check if there's already a value in the description field
var currentDescription = target.u_description; // Get the current value of the description field
var newLogonInfo = 'Last Logon: ' + formattedDate;
// If there is already a value in the description field
if (currentDescription) {
// Compare the new logon info with the existing description to check if it's different
if (currentDescription.indexOf(newLogonInfo) === -1) {
// Append the new logon info if it's not already present
target.u_description = currentDescription + '\n' + newLogonInfo;
gs.info('Updated description: ' + target.description); // Log the updated description
} else {
gs.info('No update needed. Last logon info already present.');
}
} else {
// Set the new description if it's empty
target.u_description = newLogonInfo;
gs.info('Description set to: ' + target.u_description); // Log the new description
}
return target.u_description; // return the value to be put into the target field
})(source);