/** * Parsed string adapted with TZ (locales) and format for the specified lang. * @param tz Lang * @param locale Locales * @param date Date * @returns String */ export const showDate = (tz: string, locale: Map, date: Date) => { return date.toLocaleString(tz).replace(" ", ` ${locale.get("u_time_at")} `); }; enum TimeSecond { Year = 31536000, Week = 604800, Day = 86400, Hour = 3600, Minute = 60, Second = 1, } /** * Take a cooldown, for example 2min and transform it to seconds, here: 120s * @param time time in human format * @returns time in seconds */ export const strToSeconds = (time: string) => { const regex = new RegExp( `(?<${TimeSecond[TimeSecond.Year]}>[0-9]+(?=[y|a]))|(?<${ TimeSecond[TimeSecond.Week] }>[0-9]+(?=[w]))|(?<${TimeSecond[TimeSecond.Day]}>[0-9]+(?=[d|j]))|(?<${ TimeSecond[TimeSecond.Hour] }>[0-9]+(?=[h]))|(?<${TimeSecond[TimeSecond.Minute]}>[0-9]+(?=[m]))|(?<${ TimeSecond[TimeSecond.Second] }>[0-9]+(?=[s]?))` ); const data = Object.assign({}, regex.exec(time)?.groups); let res = 0; Object.entries(data).forEach(([key, value]) => { if (value) { res += +value * TimeSecond[key as keyof typeof TimeSecond]; } }); return res; }; /** * Calculating the difference between a date and now * @param time Time * @returns Delta between the time and now */ export const timeDeltaToString = (time: number) => { const now = Date.now(); // TODO adapt the output and not always parse the time as seconds return `${strToSeconds(`${(now - time) / 1000}`)} secs`; };