Skip to content

Instantly share code, notes, and snippets.

@endymion1818
Last active June 19, 2024 09:01
Show Gist options
  • Save endymion1818/cff4eb113f6723f29bf4f8077a489ad5 to your computer and use it in GitHub Desktop.
Save endymion1818/cff4eb113f6723f29bf4f8077a489ad5 to your computer and use it in GitHub Desktop.
Change milliseconds to a timestamp in the format `HH:MM:SS`
/**
*
* @param {number} milliseconds - time in milliseconds
* @returns {string} - time in hours, minutes, seconds
*/
function millisecondsToTimestamp(milliseconds) {
if(milliseconds < 0) {
return '00:00:00';
}
if(milliseconds === 0) {
return '00:00:00';
}
// 1- Convert to seconds:
let seconds = milliseconds / 1000;
// 2- Extract hours:
const hours = Math.floor(seconds / 3600)
.toString()
.padStart(2, "0"); // 3,600 seconds in 1 hour
seconds %= 3600; // seconds remaining after extracting hours
// 3- Extract minutes:
const minutes = Math.floor(seconds / 60)
.toString()
.padStart(2, "0"); // 60 seconds in 1 minute
// 4- Keep only seconds not extracted to minutes:
const secondsString = Math.floor(seconds % 60)
.toString()
.padStart(2, "0");
// 5- Return formatted time:
return `${hours}:${minutes}:${secondsString}`;
}
export default millisecondsToTimestamp;
import { it, expect, describe } from 'vitest'
import millisecondsToTimestamp from "../src/common-utilities/milliseconds-to-timestamp";
describe('millisecondsToTimestamp', () => {
it('should convert milliseconds to timestamp', () => {
// easy peasy
expect(millisecondsToTimestamp(1000)).toBe('00:00:01');
expect(millisecondsToTimestamp(60000)).toBe('00:01:00');
expect(millisecondsToTimestamp(3600000)).toBe('01:00:00');
expect(millisecondsToTimestamp(3661000)).toBe('01:01:01');
});
it('should work for edge cases', ()=> {
// Test when milliseconds is a minus number
expect(millisecondsToTimestamp(-61000)).toBe('00:00:00');
// Test when milliseconds is 0
expect(millisecondsToTimestamp(0)).toBe('00:00:00');
// Test when milliseconds is less than 1000 (less than a second)
expect(millisecondsToTimestamp(500)).toBe('00:00:00');
// Test when milliseconds is just over a minute
expect(millisecondsToTimestamp(61000)).toBe('00:01:01');
// Test when milliseconds is just over an hour
expect(millisecondsToTimestamp(3661000)).toBe('01:01:01');
// Test when milliseconds is just under a day
expect(millisecondsToTimestamp(86399000)).toBe('23:59:59');
// Test when milliseconds is exactly a day
expect(millisecondsToTimestamp(86400000)).toBe('24:00:00');
// Test when milliseconds is just over a day
expect(millisecondsToTimestamp(86401000)).toBe('24:00:01');
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment