/** * Parses and formats the given date-time string representation. * * The format assumed is "YYYY-MM-DDTHH:MM:SS". * * @param dateTimeString A string expressing a date and a time, in the above mentioned format. * @returns {string} A human-friendly string version of that date and time. */ export function parseAndFormatDateTime(dateTimeString) { return formatDateTime(parseDateTime(dateTimeString)) } /** * Parses date-time string representations and returns a parsed object. * * The format assumed is "YYYY-MM-DDTHH:MM:SS". * * @param dateTimeString A string expressing a date and a time, in the above mentioned format. * @returns {object} A Date object with the parsed date and time information as content. */ export function parseDateTime(dateTimeString) { return new Date(dateTimeString + '.000Z') } /** * Serializes the given date and time value to a human-friendly string. * * @param dateTime An object representation of a date and time. * @returns {string} A human-friendly string version of that date and time. */ export function formatDateTime(dateTime) { let date const currentDate = new Date() date = addPaddingToTwo(dateTime.getDay()) + '/' + addPaddingToTwo(dateTime.getMonth()) + '/' + addPaddingToTwo(dateTime.getFullYear()) if ( dateTime.getFullYear() === currentDate.getFullYear() && dateTime.getMonth() === currentDate.getMonth() ) { if (dateTime.getDate() === currentDate.getDate()) { date = 'Today' } else if (dateTime.getDate() === currentDate.getDate() - 1) { date = 'Yesterday' } } return ( date + ', ' + addPaddingToTwo(dateTime.getHours()) + ':' + addPaddingToTwo(dateTime.getMinutes()) ) } /** * Formats the given number of seconds/ticks to a formatted time representation. * * @param seconds The number of seconds. * @returns {string} A string representation of that amount of second, in the from of HH:MM:SS. */ export function convertSecondsToFormattedTime(seconds) { if (seconds <= 0) { return '0s' } let hour = Math.floor(seconds / 3600) let minute = Math.floor(seconds / 60) % 60 let second = seconds % 60 hour = isNaN(hour) ? 0 : hour minute = isNaN(minute) ? 0 : minute second = isNaN(second) ? 0 : second if (hour === 0 && minute === 0) { return second + 's' } else if (hour === 0) { return minute + 'm' + addPaddingToTwo(second) + 's' } else { return ( hour + 'h' + addPaddingToTwo(minute) + 'm' + addPaddingToTwo(second) + 's' ) } } /** * Pads the given integer to have at least two digits. * * @param integer An integer to be padded. * @returns {string} A string containing the padded integer. */ function addPaddingToTwo(integer) { if (integer < 10) { return '0' + integer.toString() } else { return integer.toString() } }