diff options
Diffstat (limited to 'src/utils/utils.ts')
| -rw-r--r-- | src/utils/utils.ts | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/utils/utils.ts b/src/utils/utils.ts new file mode 100644 index 0000000..e2ed559 --- /dev/null +++ b/src/utils/utils.ts @@ -0,0 +1,52 @@ +import { I18N } from 'astrowind:config'; + +export const formatter: Intl.DateTimeFormat = new Intl.DateTimeFormat(I18N?.language, { + year: 'numeric', + month: 'short', + day: 'numeric', + timeZone: 'UTC', +}); + +export const getFormattedDate = (date: Date): string => (date ? formatter.format(date) : ''); + +export const trim = (str = '', ch?: string) => { + let start = 0, + end = str.length || 0; + while (start < end && str[start] === ch) ++start; + while (end > start && str[end - 1] === ch) --end; + return start > 0 || end < str.length ? str.substring(start, end) : str; +}; + +// Function to format a number in thousands (K) or millions (M) format depending on its value +export const toUiAmount = (amount: number) => { + if (!amount) return 0; + + let value: string; + + if (amount >= 1000000000) { + const formattedNumber = (amount / 1000000000).toFixed(1); + if (Number(formattedNumber) === parseInt(formattedNumber)) { + value = parseInt(formattedNumber) + 'B'; + } else { + value = formattedNumber + 'B'; + } + } else if (amount >= 1000000) { + const formattedNumber = (amount / 1000000).toFixed(1); + if (Number(formattedNumber) === parseInt(formattedNumber)) { + value = parseInt(formattedNumber) + 'M'; + } else { + value = formattedNumber + 'M'; + } + } else if (amount >= 1000) { + const formattedNumber = (amount / 1000).toFixed(1); + if (Number(formattedNumber) === parseInt(formattedNumber)) { + value = parseInt(formattedNumber) + 'K'; + } else { + value = formattedNumber + 'K'; + } + } else { + value = Number(amount).toFixed(0); + } + + return value; +}; |
