dateTimeHelpers.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. export const formatTimestamp = (
  2. timestamp?: number | string | Date,
  3. format: Intl.DateTimeFormatOptions = { hourCycle: 'h23' }
  4. ): string => {
  5. if (!timestamp) {
  6. return '';
  7. }
  8. // empty array gets the default one from the browser
  9. const date = new Date(timestamp);
  10. // invalid date
  11. if (Number.isNaN(date.getTime())) {
  12. return '';
  13. }
  14. // browser support
  15. const language = navigator.language || navigator.languages[0];
  16. return date.toLocaleString(language || [], format);
  17. };
  18. export const formatMilliseconds = (input = 0) => {
  19. const milliseconds = Math.max(input || 0, 0);
  20. const seconds = Math.floor(milliseconds / 1000);
  21. const minutes = Math.floor(seconds / 60);
  22. const hours = Math.floor(minutes / 60);
  23. if (hours > 0) {
  24. return `${hours}h ${minutes % 60}m`;
  25. }
  26. if (minutes > 0) {
  27. return `${minutes}m ${seconds % 60}s`;
  28. }
  29. if (seconds > 0) {
  30. return `${seconds}s`;
  31. }
  32. return `${milliseconds}ms`;
  33. };
  34. export const passedTime = (value: number) => (value < 10 ? `0${value}` : value);
  35. export const calculateTimer = (startedAt: number) => {
  36. const nowDate = new Date();
  37. const now = nowDate.getTime();
  38. const newDate = now - startedAt;
  39. const minutes = nowDate.getMinutes();
  40. const second = nowDate.getSeconds();
  41. return newDate > 0 ? `${passedTime(minutes)}:${passedTime(second)}` : '00:00';
  42. };