PHP byte translation in Javascript

Not a question, but a challenge.

I have this PHP function that I always use, and now I need it in Javascript.

function formatBytes($bytes, $precision = 0) { $units = array('b', 'KB', 'MB', 'GB', 'TB'); $bytes = max($bytes, 0); $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); $pow = min($pow, count($units) - 1); $bytes /= pow(1024, $pow); return round($bytes, $precision) . ' ' . $units[$pow]; } 

EDIT: Thanks to the answers, I came up with something shorter, but without accuracy (let me know if you have some thoughts)

 function format_bytes(size){ var base = Math.log(size) / Math.log(1024); var suffixes = ['b', 'KB', 'MB', 'GB', 'TB' , 'PB' , 'EB']; return Math.round(Math.pow(1024, base - Math.floor(base)), 0) + ' ' + suffixes[Math.floor(base)]; } 
+4
source share
2 answers

Tested:

 function formatBytes(bytes, precision) { var units = ['b', 'KB', 'MB', 'GB', 'TB']; bytes = Math.max(bytes, 0); var pwr = Math.floor((bytes ? Math.log(bytes) : 0) / Math.log(1024)); pwr = Math.min(pwr, units.length - 1); bytes /= Math.pow(1024, pwr); return Math.round(bytes, precision) + ' ' + units[pwr]; } 
0
source

Think it right, did not check:

Update:. To fix this, since there was no precision by default, and I had a typo in the last line, now functional.

 function formatBytes(bytes, precision) { var units = ['b', 'KB', 'MB', 'GB', 'TB']; var bytes = Math.max(bytes, 0); var pow = Math.floor((bytes ? Math.log(bytes) : 0) / Math.log(1024)); pow = Math.min(pow, units.length - 1); bytes = bytes / Math.pow(1024, pow); precision = (typeof(precision) == 'number' ? precision : 0); return (Math.round(bytes * Math.pow(10, precision)) / Math.pow(10, precision)) + ' ' + units[pow]; } 
+1
source

All Articles