pussy-ts/src/utils/date.ts

import dateFormat from 'dateformat';

export const numberToUtcDate = (timestamp: number) =>
  dateFormat(new Date(timestamp), 'yyyy-mm-dd"T"HH:MM:ss.l', true);

export const dateToUtcNumber = (isoString: string) =>
  Date.parse(isoString.endsWith('Z') ? isoString : `${isoString}Z`);

export const getNowUtcNumber = (): number => {
  return Date.now(); //dateToUtcNumber(new Date().toISOString());
};
//
function roundMilliseconds(dateTimeString: string) {
  const date = new Date(dateTimeString);
  const roundedMilliseconds = Math.round(date.getMilliseconds() / 1000) * 1000;
  date.setMilliseconds(roundedMilliseconds);
  return dateFormat(date, 'yyyy-mm-dd"T"HH:MM:ss.l');
}
function getCurrentTimezoneOffset() {
  const now = new Date();
  return -now.getTimezoneOffset() / 60;
}

function numberToDateWithTimezone(timestamp: number, timezoneOffset?: number) {
  // Convert timestamp from milliseconds to a Date object
  const date = new Date(timestamp);

  const tzOffset = timezoneOffset || getCurrentTimezoneOffset();
  console.log('---tzOffset', tzOffset);
  // Adjust the date for the timezone offset
  // The timezoneOffset is in hours for the target timezone relative to UTC
  const localTime = date.getTime();
  const localOffset = date.getTimezoneOffset() * 60000; // in milliseconds
  const utc = localTime + localOffset;
  const timezoneDate = new Date(utc + 3600000 * tzOffset);

  // Format the date using dateFormat
  return dateFormat(timezoneDate, 'yyyy-mm-dd HH:MM:ss');
}

function pluralizeUnit(quantity: number, unit: string): string {
  return quantity === 1 ? unit : `${unit}s`;
}

const minuteInMs = 60000; // 60 seconds * 1000 milliseconds
const hourInMs = 3600000; // 60 minutes * 60 seconds * 1000 milliseconds
const dayInMs = 86400000; // 24 hours * 60 minutes * 60 seconds * 1000 milliseconds

function convertTimestampToString(timestamp: number): string {
  if (timestamp < minuteInMs) {
    const seconds = Math.floor(timestamp / 1000);
    return `${seconds} ${pluralizeUnit(seconds, 'second')}`;
  }
  if (timestamp < hourInMs) {
    const minutes = Math.floor(timestamp / minuteInMs);
    return `${minutes} ${pluralizeUnit(minutes, 'minute')}`;
  }
  if (timestamp < dayInMs) {
    const hours = Math.floor(timestamp / hourInMs);
    return `${hours} ${pluralizeUnit(hours, 'hour')}`;
  }

  const days = Math.floor(timestamp / dayInMs);
  return `${days} ${pluralizeUnit(days, 'day')}`;
}

export {
  roundMilliseconds,
  numberToDateWithTimezone,
  convertTimestampToString,
};

Synonyms

cyb/src/utils/date.ts

Neighbours