simple-pure-utils
Version:
Funciones puras para manipulación de objetos, arreglos, promesas y observables
122 lines • 9.23 kB
JavaScript
import { assertUnreachable } from ".";
/**Trunca la parte menos significativa de una fecha */
export function truncateDate(value, precision) {
const year = value.getFullYear();
const month = value.getMonth();
const day = value.getDate();
const hour = value.getHours();
const minutes = value.getMinutes();
const seconds = value.getSeconds();
switch (precision) {
case "milliseconds":
return value;
case "seconds":
return new Date(year, month, day, hour, minutes, seconds);
case "minutes":
return new Date(year, month, day, hour, minutes);
case "hours":
return new Date(year, month, day, hour);
case "days":
return new Date(year, month, day);
case "months":
return new Date(year, month);
case "years":
return new Date(year, 0);
}
}
/**Suma un valor en cierta unidad a una fecha */
export function addDate(date, units, value) {
const ms = date.valueOf();
switch (units) {
case "milliseconds":
return new Date(ms + value);
case "seconds":
return new Date(ms + value * 1000);
case "minutes":
return new Date(ms + value * 1000 * 60);
case "hours":
return new Date(ms + value * 1000 * 60 * 60);
case "days":
//Note que no podemos sumar 24 horas por dia por lo del cambio de horario
{
const a = new Date(ms);
a.setDate(a.getDate() + value);
return a;
}
case "months":
{
const a = new Date(ms);
a.setMonth(a.getMonth() + value);
return a;
}
case "years":
{
const a = new Date(ms);
a.setFullYear(a.getFullYear() + value);
return a;
}
}
}
/**
* Returns a - b
*/
export function dateDiff(a, b, units) {
let x = a.valueOf() - b.valueOf();
if (units == "milliseconds")
return x;
x /= 1000;
if (units == "seconds")
return x;
x /= 60;
if (units == "minutes")
return x;
x /= 60;
if (units == "hours")
return x;
x /= 24;
if (units == "days")
return x;
assertUnreachable(units);
}
/** Returns a user friendly scale for the given time interval */
export function getTimeIntervalScale(seconds) {
if (seconds < 60) {
return {
amount: seconds, units: "seconds", type: seconds < 1 ? "zero" :
seconds == 1 ? "one" :
seconds < 10 ? "few" : "number"
};
}
const minutes = Math.floor(seconds / 60);
if (minutes < 30) {
return {
amount: minutes, units: "minutes", type: minutes < 2 ? "one" : "number"
};
}
const hours = Math.floor(minutes / 60);
if (hours < 24) {
return {
amount: hours, units: "hours", type: minutes <= 30 ? "half" :
hours < 2 ? "one" : "number"
};
}
const daysInYear = 364.25;
const daysInMonth = daysInYear / 12;
const days = Math.floor(hours / 24);
if (days < daysInMonth) {
return {
amount: days, units: "days", type: days < 2 ? "one" : "number"
};
}
const months = Math.floor(days / daysInMonth);
if (months < 12) {
return {
amount: months, units: "months", type: months < 2 ? "one" : "number"
};
}
const years = Math.floor(days / daysInYear);
return {
amount: years, units: "years", type: years < 2 ? "one" : "number"
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDO0FBR3RDLHNEQUFzRDtBQUN0RCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVcsRUFBRSxTQUFvQjtJQUMxRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUVuQyxRQUFRLFNBQVMsRUFBRTtRQUNmLEtBQUssY0FBYztZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLEtBQUssU0FBUztZQUNWLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RCxLQUFLLFNBQVM7WUFDVixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxLQUFLLE9BQU87WUFDUixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLEtBQUssTUFBTTtZQUNQLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxLQUFLLFFBQVE7WUFDVCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqQyxLQUFLLE9BQU87WUFDUixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNoQztBQUNMLENBQUM7QUFFRCxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFVLEVBQUUsS0FBZ0IsRUFBRSxLQUFhO0lBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixRQUFRLEtBQUssRUFBRTtRQUNYLEtBQUssY0FBYztZQUNmLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEtBQUssU0FBUztZQUNWLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2QyxLQUFLLFNBQVM7WUFDVixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEtBQUssT0FBTztZQUNSLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEtBQUssTUFBTTtZQUNQLHlFQUF5RTtZQUN6RTtnQkFDSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7UUFDTCxLQUFLLFFBQVE7WUFDVDtnQkFDSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7UUFDTCxLQUFLLE9BQU87WUFDUjtnQkFDSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7S0FDUjtBQUNMLENBQUM7QUFDRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxLQUFvRjtJQUMzSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLElBQUksS0FBSyxJQUFJLGNBQWM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0QyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ1YsSUFBSSxLQUFLLElBQUksU0FBUztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDUixJQUFJLEtBQUssSUFBSSxTQUFTO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFFakMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNSLElBQUksS0FBSyxJQUFJLE9BQU87UUFBRSxPQUFPLENBQUMsQ0FBQztJQUUvQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ1IsSUFBSSxLQUFLLElBQUksTUFBTTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFVRCxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQWU7SUFDaEQsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFO1FBQ2QsT0FBTztZQUNILE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQ25DLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRO1NBQzlDLENBQUM7S0FDTDtJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRTtRQUNkLE9BQU87WUFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUNuQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDckMsQ0FBQztLQUNMO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFdkMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO1FBQ1osT0FBTztZQUNILE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQy9CLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDdkMsQ0FBQztLQUNMO0lBR0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzFCLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFcEMsSUFBSSxJQUFJLEdBQUcsV0FBVyxFQUFFO1FBQ3BCLE9BQU87WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUM3QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDbEMsQ0FBQztLQUNMO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFFOUMsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO1FBQ2IsT0FBTztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQ2pDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUNwQyxDQUFDO0tBQ0w7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQztJQUU1QyxPQUFPO1FBQ0gsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFDL0IsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRO0tBQ25DLENBQUM7QUFDTixDQUFDIn0=