Saltar al contenido principal

Fechas

La manipulación de fechas y horas es crucial en la mayoría de las aplicaciones. Así es como los diferentes lenguajes manejan las fechas, tanto con características incorporadas como con bibliotecas populares.

Operaciones de Fecha Incorporadas​

Fecha y Hora Actual​

// Current date/time
const now = new Date();
console.log(now); // 2024-01-15T10:30:00.000Z

// Get components
now.getFullYear(); // 2024
now.getMonth(); // 0 (January, 0-indexed)
now.getDate(); // 15
now.getHours(); // 10
now.getMinutes(); // 30
now.getSeconds(); // 0
now.getDay(); // 1 (Monday, 0=Sunday)

Creación de Fechas​

// From string
const date1 = new Date("2024-01-15");
const date2 = new Date("2024-01-15T10:30:00");

// From components
const date3 = new Date(2024, 0, 15); // month is 0-indexed
const date4 = new Date(2024, 0, 15, 10, 30, 0);

// From timestamp
const date5 = new Date(1705312200000); // milliseconds

Formateo de Fechas​

const date = new Date(2024, 0, 15, 10, 30, 0);

// Basic formatting
date.toISOString(); // "2024-01-15T10:30:00.000Z"
date.toLocaleDateString(); // "1/15/2024" (locale-dependent)
date.toLocaleString(); // "1/15/2024, 10:30:00 AM"

// Custom formatting (manual or use Intl)
const formatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
});
formatter.format(date); // "01/15/2024, 10:30 AM"

Aritmética de Fechas​

const date = new Date(2024, 0, 15);

// Add/subtract days
date.setDate(date.getDate() + 7); // Add 7 days
date.setDate(date.getDate() - 3); // Subtract 3 days

// Add/subtract months
date.setMonth(date.getMonth() + 1); // Add 1 month

// Add/subtract years
date.setFullYear(date.getFullYear() + 1); // Add 1 year

// Difference in milliseconds
const date1 = new Date(2024, 0, 15);
const date2 = new Date(2024, 0, 20);
const diff = date2 - date1; // 432000000 ms (5 days)

Bibliotecas Populares​

// date-fns (modern, tree-shakeable)
import { format, addDays, differenceInDays, parseISO } from 'date-fns';

const date = new Date(2024, 0, 15);

// Formatting
format(date, 'yyyy-MM-dd'); // "2024-01-15"
format(date, 'MMMM d, yyyy'); // "January 15, 2024"

// Arithmetic
addDays(date, 7); // Add 7 days
differenceInDays(date2, date1); // Difference in days

// Parsing
parseISO("2024-01-15"); // Date object

// moment.js (legacy, but still popular)
const moment = require('moment');

moment().format('YYYY-MM-DD'); // "2024-01-15"
moment().add(7, 'days'); // Add 7 days
moment().subtract(3, 'days'); // Subtract 3 days
moment(date2).diff(moment(date1), 'days'); // Difference

Puntos Clave​

  • Madurez de la biblioteca estándar — El java.time de Java, el datetime de Python, el time de Go y el DateTime de C# proporcionan APIs incorporadas ricas para parseo, formateo, aritmética y comparación. Por ejemplo, time.Parse("2006-01-02", "2024-01-15") de Go y datetime.strptime("2024-01-15", "%Y-%m-%d") de Python ambos parsean fechas sin dependencias extra. C, Zig y Rust ofrecen solo timestamps básicos en la biblioteca estándar; los desarrolladores de Rust típicamente usan el crate chrono para soporte completo de fechas. Si necesitas fechas directamente, elige Java, Python, Go o C#; para trabajo en sistemas, planea agregar una biblioteca de fechas.

  • Convenciones de formateo — Cada lenguaje usa cadenas de formato diferentes: Go usa 2006-01-02 15:04:05 (fecha de referencia como mnemotécnico); Python usa %Y-%m-%d %H:%M:%S; C# usa yyyy-MM-dd HH:mm:ss; Java usa DateTimeFormatter.ofPattern("yyyy-MM-dd"). El enfoque de Go es memorable porque la fecha de referencia es literal: mes 01, día 02, hora 15, etc. Al cambiar de lenguaje, ten una hoja de referencia de formatos a mano—mezclarlos (por ejemplo, %y vs %Y para el año) causa bugs sutiles.

  • Manejo de zonas horarias — El ZonedDateTime de Java, el dateutil.tz de Python, NodaTime de C# y chrono de Rust proporcionan soporte robusto de zonas horarias. El Date de JavaScript está centrado en UTC: getHours() retorna hora local, pero el almacenamiento es UTC, lo cual puede confundir a los desarrolladores. C y C++ requieren manejo manual con localtime/gmtime o bibliotecas externas. Para aplicaciones que necesitan mostrar o almacenar horas en múltiples zonas horarias, prefiere Java, Python o C# con NodaTime; evita C/C++ a menos que estés preparado para integrar una biblioteca de zonas horarias.

  • Bibliotecas populares — date-fns (JavaScript), Carbon (PHP), chrono (Rust) y NodaTime (C#) extienden las funciones incorporadas con formateo legible por humanos, parseo natural y manejo más seguro de zonas horarias. Por ejemplo, el $date->diffForHumans() de Carbon retorna "2 hours ago." Zig y C tienen soporte mínimo del ecosistema—la mayoría de los proyectos usan std.time o timestamps Unix crudos. Si necesitas funciones avanzadas de fechas (por ejemplo, "próximo martes", "fin de mes"), elige un lenguaje con una biblioteca de fechas madura.