106 lines
3.2 KiB
TypeScript
106 lines
3.2 KiB
TypeScript
import { DepartureTime } from "../../types";
|
|
|
|
const TOKEN_KEY = "token";
|
|
|
|
/**
|
|
* Uloží token do local storage prohlížeče.
|
|
*
|
|
* @param token token
|
|
*/
|
|
export const storeToken = (token: string) => {
|
|
localStorage.setItem(TOKEN_KEY, token);
|
|
}
|
|
|
|
/**
|
|
* Vrátí token z local storage, pokud tam je.
|
|
*
|
|
* @returns token nebo null
|
|
*/
|
|
export const getToken = (): string | undefined => {
|
|
return localStorage.getItem(TOKEN_KEY) ?? undefined;
|
|
}
|
|
|
|
/**
|
|
* Odstraní token z local storage, pokud tam je.
|
|
*/
|
|
export const deleteToken = () => {
|
|
localStorage.removeItem(TOKEN_KEY);
|
|
}
|
|
|
|
/**
|
|
* Vrátí human-readable reprezentaci předaného data a času pro zobrazení.
|
|
* Příklady:
|
|
* - dnes 10:52
|
|
* - 10.05.2023 10:52
|
|
*/
|
|
export function getHumanDateTime(datetime: Date) {
|
|
let hours = String(datetime.getHours()).padStart(2, '0');
|
|
let minutes = String(datetime.getMinutes()).padStart(2, "0");
|
|
if (new Date().toDateString() === datetime.toDateString()) {
|
|
return `dnes ${hours}:${minutes}`;
|
|
} else {
|
|
let day = String(datetime.getDate()).padStart(2, '0');
|
|
let month = String(datetime.getMonth() + 1).padStart(2, "0");
|
|
let year = datetime.getFullYear();
|
|
return `${day}.${month}.${year} ${hours}:${minutes}`;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Vrátí true, pokud je předaný čas větší než aktuální čas.
|
|
*/
|
|
export function isInTheFuture(time: DepartureTime) {
|
|
const now = new Date();
|
|
const currentHours = now.getHours();
|
|
const currentMinutes = now.getMinutes();
|
|
const currentDate = now.toDateString();
|
|
const [hours, minutes] = time.split(':').map(Number);
|
|
|
|
if (currentDate === now.toDateString()) {
|
|
return hours > currentHours || (hours === currentHours && minutes > currentMinutes);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Vrátí index dne v týdnu, kde pondělí=0, neděle=6
|
|
*
|
|
* @param date datum
|
|
* @returns index dne v týdnu
|
|
*/
|
|
export const getDayOfWeekIndex = (date: Date) => {
|
|
// https://stackoverflow.com/a/4467559
|
|
return (((date.getDay() - 1) % 7) + 7) % 7;
|
|
}
|
|
|
|
/** Vrátí první pracovní den v týdnu předaného data. */
|
|
export function getFirstWorkDayOfWeek(date: Date) {
|
|
const firstDay = new Date(date.getTime());
|
|
firstDay.setDate(date.getDate() - getDayOfWeekIndex(date));
|
|
return firstDay;
|
|
}
|
|
|
|
/** Vrátí poslední pracovní den v týdnu předaného data. */
|
|
export function getLastWorkDayOfWeek(date: Date) {
|
|
const lastDay = new Date(date.getTime());
|
|
lastDay.setDate(date.getDate() + (4 - getDayOfWeekIndex(date)));
|
|
return lastDay;
|
|
}
|
|
|
|
/** Vrátí datum v ISO formátu. */
|
|
export function formatDate(date: Date, format?: string) {
|
|
let day = String(date.getDate()).padStart(2, '0');
|
|
let month = String(date.getMonth() + 1).padStart(2, "0");
|
|
let year = String(date.getFullYear());
|
|
|
|
const f = (format === undefined) ? 'YYYY-MM-DD' : format;
|
|
return f.replace('DD', day).replace('MM', month).replace('YYYY', year);
|
|
}
|
|
|
|
/** Vrátí human-readable reprezentaci předaného data pro zobrazení. */
|
|
export function getHumanDate(date: Date) {
|
|
let currentDay = String(date.getDate()).padStart(2, '0');
|
|
let currentMonth = String(date.getMonth() + 1).padStart(2, "0");
|
|
let currentYear = date.getFullYear();
|
|
return `${currentDay}.${currentMonth}.${currentYear}`;
|
|
} |