diff --git a/README.md b/README.md index c87f97915..6872d8038 100644 --- a/README.md +++ b/README.md @@ -345,6 +345,7 @@ average(1, 2, 3);
View contents +* [`formatDuration`](#formatduration) * [`luhnCheck`](#luhncheck)
@@ -5370,6 +5371,41 @@ yesNo('Foo', true); // true --- ## _Uncategorized_ +### formatDuration + +Returns the human readable format of the given number of milliseconds. + +Divide `ms` with the appropriate values to obtain the appropriate values for `day`, `hour`, `minute`, `second` and `millisecond`. +Use `Object.entries()` with `Array.filter()` to keep only non-zero values. +Use `Array.map()` to create the string for each value, pluralizing appropriately. +Use `String.join(', ')` to combine the values into a string. + +```js +const formatDuration = ms => { + if (ms < 0) ms = -ms; + const time = { + day: Math.floor(ms / 86400000), + hour: Math.floor(ms / 3600000) % 24, + minute: Math.floor(ms / 60000) % 60, + second: Math.floor(ms / 1000) % 60, + millisecond: Math.floor(ms) % 1000 + }; + return Object.entries(time) + .filter(val => val[1] !== 0) + .map(val => val[1] + ' ' + (val[1] !== 1 ? val[0] + 's' : val[0])) + .join(', '); +}; +``` + +```js +formatDuration(1001); // "1 second, 1 millisecond" +formatDuration(343250555); // "3 days, 23 hours, 20 minutes, 50 seconds, 555 milliseconds" +formatDuration(34325055574); // "397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds" +``` + +
[⬆ back to top](#table-of-contents) + + ### luhnCheck Implementation of the [Luhn Algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers etc. diff --git a/docs/index.html b/docs/index.html index 51f1657e4..59a2c54a8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -33,7 +33,7 @@ document.body.removeChild(textArea); } }, false); - }

logo 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

call

Given a key and a set of arguments, call them when given a context. Primarily useful in composition.

Use a closure to call a stored key with stored arguments.

const call = (key, ...args) => context => context[key](...args);
+      }

logo 30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.

 

Adapter

call

Given a key and a set of arguments, call them when given a context. Primarily useful in composition.

Use a closure to call a stored key with stored arguments.

const call = (key, ...args) => context => context[key](...args);
 
Promise.resolve([1, 2, 3])
   .then(call('map', x => 2 * x))
   .then(console.log); //[ 2, 4, 6 ]
@@ -1203,7 +1203,24 @@ console.log<
 yesNo('yes'); // true
 yesNo('No'); // false
 yesNo('Foo', true); // true
-

Uncategorized

luhnCheck

Implementation of the Luhn Algorithm used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers etc.

Use String.split(''), Array.reverse() and Array.map() in combination with parseInt() to obtain an array of digits. Use Array.splice(0,1) to obtain the last digit. Use Array.reduce() to implement the Luhn Algorithm. Return true if sum is divisible by 10, false otherwise.

const luhnCheck = num => {
+

Uncategorized

formatDuration

Returns the human readable format of the given number of milliseconds.

Divide ms with the appropriate values to obtain the appropriate values for day, hour, minute, second and millisecond. Use Object.entries() with Array.filter() to keep only non-zero values. Use Array.map() to create the string for each value, pluralizing appropriately. Use String.join(', ') to combine the values into a string.

const formatDuration = ms => {
+  if (ms < 0) ms = -ms;
+  const time = {
+    day: Math.floor(ms / 86400000),
+    hour: Math.floor(ms / 3600000) % 24,
+    minute: Math.floor(ms / 60000) % 60,
+    second: Math.floor(ms / 1000) % 60,
+    millisecond: Math.floor(ms) % 1000
+  };
+  return Object.entries(time)
+    .filter(val => val[1] !== 0)
+    .map(val => val[1] + ' ' + (val[1] !== 1 ? val[0] + 's' : val[0]))
+    .join(', ');
+};
+
formatDuration(1001); // "1 second, 1 millisecond"
+formatDuration(343250555); // "3 days, 23 hours, 20 minutes, 50 seconds, 555 milliseconds"
+formatDuration(34325055574); // "397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds"
+

luhnCheck

Implementation of the Luhn Algorithm used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers etc.

Use String.split(''), Array.reverse() and Array.map() in combination with parseInt() to obtain an array of digits. Use Array.splice(0,1) to obtain the last digit. Use Array.reduce() to implement the Luhn Algorithm. Return true if sum is divisible by 10, false otherwise.

const luhnCheck = num => {
   let arr = (num + '')
     .split('')
     .reverse()
@@ -1216,4 +1233,4 @@ console.log<
 
luhnCheck('4485275742308327'); // true
 luhnCheck(6011329933655299); //  true
 luhnCheck(123456789); // false
-
\ No newline at end of file + \ No newline at end of file diff --git a/snippets/formatDuration.md b/snippets/formatDuration.md index cc3927b09..c2ed6b0a9 100644 --- a/snippets/formatDuration.md +++ b/snippets/formatDuration.md @@ -7,7 +7,7 @@ Use `Object.entries()` with `Array.filter()` to keep only non-zero values. Use `Array.map()` to create the string for each value, pluralizing appropriately. Use `String.join(', ')` to combine the values into a string. -``` js +```js const formatDuration = ms => { if (ms < 0) ms = -ms; const time = { @@ -15,7 +15,7 @@ const formatDuration = ms => { hour: Math.floor(ms / 3600000) % 24, minute: Math.floor(ms / 60000) % 60, second: Math.floor(ms / 1000) % 60, - millisecond: Math.floor(ms) % 1000, + millisecond: Math.floor(ms) % 1000 }; return Object.entries(time) .filter(val => val[1] !== 0) diff --git a/tag_database b/tag_database index 0c13b395e..671b4ba6d 100644 --- a/tag_database +++ b/tag_database @@ -47,6 +47,7 @@ filterNonUnique:array flatten:array flattenDepth:array flip:adapter +formatDuration:uncategorized fromCamelCase:string functionName:function gcd:math