workspace-v1/core/modules/utils/date.util.ts
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
Sistema NEXUS v3.4 migrado con:

Estructura principal:
- core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles)
- core/catalog: Catalogo de funcionalidades reutilizables
- shared/knowledge-base: Base de conocimiento compartida
- devtools/scripts: Herramientas de desarrollo
- control-plane/registries: Control de servicios y CI/CD
- orchestration/: Configuracion de orquestacion de agentes

Proyectos incluidos (11):
- gamilit (submodule -> GitHub)
- trading-platform (OrbiquanTIA)
- erp-suite con 5 verticales:
  - erp-core, construccion, vidrio-templado
  - mecanicas-diesel, retail, clinicas
- betting-analytics
- inmobiliaria-analytics
- platform_marketing_content
- pos-micro, erp-basico

Configuracion:
- .gitignore completo para Node.js/Python/Docker
- gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git)
- Sistema de puertos estandarizado (3005-3199)

Generated with NEXUS v3.4 Migration System
EPIC-010: Configuracion Git y Repositorios
2026-01-04 03:37:42 -06:00

249 lines
5.8 KiB
TypeScript

/**
* Date Utilities - Core Module
*
* Framework-agnostic date manipulation and formatting functions.
* Can be used in any project (NestJS, Express, Frontend, etc.)
*
* @module @core/utils/date
* @version 1.0.0
*/
/**
* Format date to ISO string
*/
export const formatToISO = (date: Date): string => {
return date.toISOString();
};
/**
* Format date to readable string (YYYY-MM-DD)
*/
export const formatToDate = (date: Date): string => {
return date.toISOString().split('T')[0];
};
/**
* Format date to datetime string (YYYY-MM-DD HH:mm:ss)
*/
export const formatToDateTime = (date: Date): string => {
return date.toISOString().replace('T', ' ').split('.')[0];
};
/**
* Format date with custom pattern
* @param date - Date to format
* @param pattern - Pattern (YYYY, MM, DD, HH, mm, ss)
*/
export const formatDate = (date: Date, pattern: string): string => {
const pad = (n: number): string => n.toString().padStart(2, '0');
return pattern
.replace('YYYY', date.getFullYear().toString())
.replace('MM', pad(date.getMonth() + 1))
.replace('DD', pad(date.getDate()))
.replace('HH', pad(date.getHours()))
.replace('mm', pad(date.getMinutes()))
.replace('ss', pad(date.getSeconds()));
};
/**
* Add days to a date
*/
export const addDays = (date: Date, days: number): Date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
/**
* Add hours to a date
*/
export const addHours = (date: Date, hours: number): Date => {
const result = new Date(date);
result.setHours(result.getHours() + hours);
return result;
};
/**
* Add minutes to a date
*/
export const addMinutes = (date: Date, minutes: number): Date => {
const result = new Date(date);
result.setMinutes(result.getMinutes() + minutes);
return result;
};
/**
* Add months to a date
*/
export const addMonths = (date: Date, months: number): Date => {
const result = new Date(date);
result.setMonth(result.getMonth() + months);
return result;
};
/**
* Check if date is in the past
*/
export const isPast = (date: Date): boolean => {
return date < new Date();
};
/**
* Check if date is in the future
*/
export const isFuture = (date: Date): boolean => {
return date > new Date();
};
/**
* Get start of day (00:00:00.000)
*/
export const startOfDay = (date: Date): Date => {
const result = new Date(date);
result.setHours(0, 0, 0, 0);
return result;
};
/**
* Get end of day (23:59:59.999)
*/
export const endOfDay = (date: Date): Date => {
const result = new Date(date);
result.setHours(23, 59, 59, 999);
return result;
};
/**
* Get start of month
*/
export const startOfMonth = (date: Date): Date => {
const result = new Date(date);
result.setDate(1);
result.setHours(0, 0, 0, 0);
return result;
};
/**
* Get end of month
*/
export const endOfMonth = (date: Date): Date => {
const result = new Date(date);
result.setMonth(result.getMonth() + 1, 0);
result.setHours(23, 59, 59, 999);
return result;
};
/**
* Get difference in days between two dates
*/
export const diffInDays = (date1: Date, date2: Date): number => {
const diff = Math.abs(date1.getTime() - date2.getTime());
return Math.ceil(diff / (1000 * 60 * 60 * 24));
};
/**
* Get difference in hours between two dates
*/
export const diffInHours = (date1: Date, date2: Date): number => {
const diff = Math.abs(date1.getTime() - date2.getTime());
return Math.ceil(diff / (1000 * 60 * 60));
};
/**
* Get difference in minutes between two dates
*/
export const diffInMinutes = (date1: Date, date2: Date): number => {
const diff = Math.abs(date1.getTime() - date2.getTime());
return Math.ceil(diff / (1000 * 60));
};
/**
* Check if two dates are the same day
*/
export const isSameDay = (date1: Date, date2: Date): boolean => {
return (
date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() === date2.getDate()
);
};
/**
* Parse ISO string to Date
*/
export const parseISO = (isoString: string): Date => {
return new Date(isoString);
};
/**
* Check if string is valid date
*/
export const isValidDate = (dateString: string): boolean => {
const date = new Date(dateString);
return !isNaN(date.getTime());
};
/**
* Get relative time description (e.g., "2 hours ago")
*/
export const getRelativeTime = (date: Date): string => {
const now = new Date();
const diffMs = now.getTime() - date.getTime();
const diffSec = Math.floor(diffMs / 1000);
const diffMin = Math.floor(diffSec / 60);
const diffHour = Math.floor(diffMin / 60);
const diffDay = Math.floor(diffHour / 24);
if (diffSec < 60) return 'just now';
if (diffMin < 60) return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;
if (diffHour < 24) return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;
if (diffDay < 30) return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;
return formatToDate(date);
};
/**
* Get Unix timestamp (seconds since epoch)
*/
export const toUnixTimestamp = (date: Date): number => {
return Math.floor(date.getTime() / 1000);
};
/**
* Create date from Unix timestamp
*/
export const fromUnixTimestamp = (timestamp: number): Date => {
return new Date(timestamp * 1000);
};
/**
* Check if date is today
*/
export const isToday = (date: Date): boolean => {
return isSameDay(date, new Date());
};
/**
* Check if date is yesterday
*/
export const isYesterday = (date: Date): boolean => {
const yesterday = addDays(new Date(), -1);
return isSameDay(date, yesterday);
};
/**
* Get age from birthdate
*/
export const getAge = (birthDate: Date): number => {
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
return age;
};