Last active
June 19, 2024 09:01
-
-
Save endymion1818/cff4eb113f6723f29bf4f8077a489ad5 to your computer and use it in GitHub Desktop.
Change milliseconds to a timestamp in the format `HH:MM:SS`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* @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; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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