Introducción: ¿Por qué es tan popular la pregunta sobre el "año actual"?
\n\nPodría parecer que lo más sencillo es preguntarle a PHP: "Oye, ¿qué año es?" y obtener una respuesta. ¡Pero no es tan simple! La pregunta "How do I use PHP to get the current year?" ha acumulado decenas de miles de visitas en Stack Overflow. ¿Por qué?
\n\nPrimero, es una de las primeras tareas que enfrenta un principiante: mostrar en el pie de página "© 2024", crear una lista dinámica de años en un formulario de registro o simplemente verificar la edad del usuario. Segundo, PHP ofrece varios enfoques diferentes, y cada uno tiene sus matices. Tercero (y esto es lo más engañoso), los novatos a menudo confunden date('y') y date('Y') — y obtienen 24 en lugar de 2024. Luego se preguntan por qué su sitio web "vive" en el siglo pasado.
En este artículo, analizaremos todos los métodos populares para obtener el año actual en PHP, desde los más obvios hasta los más avanzados. Aprenderás a evitar errores típicos, qué método elegir para tu proyecto y cómo trabajar con el año en diferentes zonas horarias. ¡Allá vamos!
\n\n1. El método más simple: la función date()
\n\nEl rey de todas las funciones de PHP para trabajar con fechas es date(). Acepta un formato y, opcionalmente, una marca de tiempo. Si no se especifica la marca de tiempo, se usa la hora actual del servidor.
Cómo obtener el año de 4 dígitos (2024, 2025…)
\n<?php\necho date('Y'); // Muestra: 2024\n?>\n\nEl símbolo Y (mayúscula) es la representación completa del año, 4 dígitos. Es el que debes usar en el 99% de los casos.
\n\nCómo obtener el año de 2 dígitos (24, 25…)
\n<?php\necho date('y'); // Muestra: 24\n?>\n\nEl símbolo y (minúscula) es el año de dos dígitos. Úsalo solo si estás escribiendo un programa de juguete o trabajando con código heredado (que probablemente ya esté roto debido a problemas similares al Y2K).
\n\nEjemplo real: copyright en el pie de página
\n<footer>\n <p>© 2010–<?php echo date('Y'); ?> Mi súper sitio</p>\n</footer>\n\nEste código actualizará automáticamente el año en el pie de página, ¡no tendrás que modificarlo cada enero! Genial, ¿verdad?
\n\n2. Enfoque orientado a objetos: la clase DateTime
\n\nSi estás escribiendo PHP moderno (7.x, 8.x), es mejor usar la clase DateTime. Es más flexible, más fácil de manipular y más legible.
Obteniendo el año con DateTime
\n<?php\n$now = new DateTime();\necho $now->format('Y'); // 2024\n?>\n\nEl método format() funciona igual que date(), pero sobre un objeto. La ventaja es que puedes cambiar fácilmente la fecha, agregar días, meses y luego volver a formatearla.
Ejemplo avanzado: año a partir de una fecha específica
\n<?php\n$date = new DateTime('2023-03-15');\necho $date->format('Y'); // 2023\n?>\n\nEsto es útil cuando trabajas con una base de datos y almacenas fechas como cadenas de texto.
\n\n3. El clásico strftime() (pero con una advertencia)
\n\nLa función strftime() es otra forma de obtener el año. Es buena porque tiene en cuenta la configuración regional (idioma y configuración regional). Por ejemplo, en la configuración regional de España, puede mostrar el nombre del mes en español.
Ejemplo con strftime
\n<?php\nsetlocale(LC_TIME, 'es_ES.utf8');\necho strftime('%Y'); // 2024\n?>\n\nPero hay un detalle importante: a partir de PHP 8.1, la función strftime() está marcada como obsoleta (deprecated). Todavía se puede usar, pero podría eliminarse en versiones futuras. Si escribes código nuevo, es mejor usar DateTime.
4. La variable $_SERVER['REQUEST_TIME']
\n\nA veces necesitas obtener el año "sobre la marcha", sin crear objetos. Para esto, puedes usar el array superglobal $_SERVER.
<?php\necho date('Y', $_SERVER['REQUEST_TIME']); // Muestra: 2024\n?>\n\nEsta variable contiene la marca de tiempo Unix del inicio de la solicitud actual. Es útil si necesitas la misma marca de tiempo varias veces durante la ejecución del script, ya que es más eficiente que llamar a time() repetidamente.
5. Usando la función time() directamente
\n\nSi ya tienes una marca de tiempo Unix y solo necesitas el año, puedes combinarla con date():
<?php\n$timestamp = time(); // Marca de tiempo actual\necho date('Y', $timestamp); // Muestra: 2024\n?>\n\nEste método es explícito y claro, especialmente si ya estás trabajando con marcas de tiempo en otras partes de tu código.
\n\nErrores comunes y cómo evitarlos
\n\nIncluso los desarrolladores experimentados cometen errores con las fechas. Aquí tienes los más frecuentes:
\n\n- \n
- Confundir Y con y: Usar
date('y')cuando necesitas el año completo. Siempre verifica si necesitas 2 o 4 dígitos. \n - Olvidar la zona horaria: PHP usa la zona horaria del servidor por defecto. Si tu audiencia está en otro país, usa
date_default_timezone_set('America/Mexico_City')o similar. \n - No manejar años bisiestos: Al calcular diferencias de fechas, ten en cuenta el 29 de febrero. La clase
DateTimelo maneja automáticamente. \n - Usar strftime() en código nuevo: Como se mencionó, está obsoleto desde PHP 8.1. Opta por
DateTimepara proyectos nuevos. \n
Conclusión: ¿Qué método elegir?
\n\nLa respuesta depende de tu contexto:
\n\n- \n
- Para scripts rápidos y simples: Usa
date('Y'). Es directo y funciona en cualquier versión de PHP. \n - Para aplicaciones modernas y orientadas a objetos: Usa
DateTime::format('Y'). Es más flexible y preparado para el futuro. \n - Para trabajar con marcas de tiempo existentes: Combina
time()o$_SERVER['REQUEST_TIME']condate(). \n - Para proyectos heredados:
strftime()puede ser útil, pero considera migrar aDateTime. \n
Ahora ya sabes cómo obtener el año actual en PHP como un profesional. ¡Elige el método que mejor se adapte a tu proyecto y empieza a codificar!