- 1 1. Introducción
- 2 2. Cómo obtener la hora actual en MySQL
- 3 3. Cómo formatear la hora actual en MySQL
- 4 4. Cálculos de fecha y hora usando la marca de tiempo actual de MySQL
- 4.1 Usando DATE_ADD() para obtener fechas futuras
- 4.2 Usando DATE_SUB() para obtener fechas pasadas
- 4.3 Usando TIMESTAMPDIFF() para encontrar la diferencia entre dos fechas y horas
- 4.4 Usando DATEDIFF() para calcular la diferencia de días
- 4.5 Usando TIME_TO_SEC() para convertir hora a segundos
- 4.6 Usando SEC_TO_TIME() para convertir segundos a hora
- 4.7 Resumen
- 5 5. Configuración de zona horaria y su impacto en la hora actual
- 6 6. Casos de Uso Prácticos (Cómo usar la hora actual de MySQL en situaciones reales)
- 7 7. Errores Comunes y Solución de Problemas
- 8 8. Preguntas frecuentes (Preguntas y respuestas)
- 9 9. Resumen
1. Introducción
La importancia de manejar la hora actual en MySQL
MySQL otorga gran importancia al manejo del tiempo para gestionar adecuadamente la información almacenada en una base de datos. En particular, las funciones que recuperan y manipulan la hora actual se utilizan en muchos escenarios, como el registro de logs, la gestión de horarios y el registro de marcas de tiempo de actualizaciones de datos. Por ejemplo, puedes aprovechar la hora actual en casos como los siguientes.
- Sistema de gestión de pedidos : registrar automáticamente las marcas de tiempo de los pedidos
- Gestión de logs : registrar logs de errores del sistema y logs de acceso
- Función de programación : almacenar citas futuras en la base de datos y enviar recordatorios
Así, manejar correctamente la hora actual en MySQL es crucial para mejorar la integridad de los datos y la precisión analítica.
Qué buscan los usuarios que quieren saber la “hora actual de MySQL”
Muchos usuarios que buscan “hora actual de MySQL” tienen los siguientes objetivos.
- Quieren recuperar la hora actual
- Quieren formatear la hora recuperada
- Quieren manipular la hora (sumar/restar)
- Quieren consultar datos dentro de un rango de tiempo específico
- Quieren manejar la hora con consideraciones de zona horaria
Para satisfacer estas necesidades, este artículo ofrece una explicación detallada, desde lo básico hasta temas avanzados, de cómo recuperar la hora actual en MySQL.
Qué aprenderás en este artículo
En este artículo, puedes aprender de manera sistemática los siguientes puntos.
- Métodos básicos para recuperar la hora actual en MySQL
- Cómo cambiar el formato de la hora actual
- Cómo realizar cálculos de fecha/hora (suma/resta)
- Cómo manejar la hora con consideraciones de zona horaria
- Casos de uso práctico (gestión de logs, gestión de horarios, etc.)
Al aprovechar esta información, puedes gestionar los datos de MySQL de manera más eficiente.
2. Cómo obtener la hora actual en MySQL
Métodos principales para obtener la hora actual en MySQL
Hay varias formas de recuperar la hora actual en MySQL. Principalmente, se utiliza la función NOW(), pero dependiendo del caso de uso, también puedes usar CURRENT_TIMESTAMP, CURDATE() o CURTIME().
NOW() para recuperar la hora actual
Sintaxis básica de NOW()
SELECT NOW();
Resultado (Ejemplo)
2025-02-01 15:30:45
NOW() recupera la fecha y hora actuales en el formato YYYY-MM-DD HH:MM:SS.
Usando CURRENT_TIMESTAMP
CURRENT_TIMESTAMP también devuelve el resultado como NOW().
Sintaxis básica de CURRENT_TIMESTAMP
SELECT CURRENT_TIMESTAMP;
Resultado (Ejemplo)
2025-02-01 15:30:45
CURRENT_TIMESTAMP puede usarse como valor predeterminado de una columna.
Ejemplo de establecer CURRENT_TIMESTAMP como valor predeterminado
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
Obtener solo la fecha con CURDATE()
Sintaxis básica de CURDATE()
SELECT CURDATE();
Resultado (Ejemplo)
2025-02-01
Puedes obtener solo la fecha sin la hora.
Obtener solo la hora con CURTIME()
Sintaxis básica de CURTIME()
SELECT CURTIME();
Resultado (Ejemplo)
15:30:45
CURTIME() se usa cuando necesitas recuperar solo la hora.
Tabla comparativa de funciones
Función | Datos Recuperados | Uso típico |
|---|---|---|
NOW() | Fecha y hora actuales ( | Registro de marcas de tiempo de creación/actualización de datos |
CURRENT_TIMESTAMP | Igual a | Valor predeterminado al crear una tabla |
CURDATE() | Solo la fecha actual ( | Obtener la fecha de hoy / filtrado |
CURTIME() | Solo hora actual ( | Extrayendo datos para rangos de tiempo específicos |
Resumen
- Si necesitas la fecha y hora actuales, usa
NOW() - Para valores predeterminados de columnas, usa
CURRENT_TIMESTAMP - Si solo quieres la fecha, usa
CURDATE() - Si solo quieres la hora, usa
CURTIME()
3. Cómo formatear la hora actual en MySQL
Usando DATE_FORMAT() para formatear la hora actual
Sintaxis básica de DATE_FORMAT()
SELECT DATE_FORMAT(NOW(), 'format_string');
Al especificar un format_string, puedes cambiar el formato de visualización de la fecha y hora.
Ejemplos básicos de formato
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
Resultado (ejemplo)
2025-02-01 15:30:45
Lista de opciones de formato para DATE_FORMAT()
Symbol | Descripción | Ejemplo (2025-02-01 15:30:45) |
|---|---|---|
%Y | Año (4 dígitos) | 2025 |
%m | Mes (relleno con ceros) | 02 |
%d | Día (relleno con ceros) | 01 |
%H | Hora (24 horas) | 15 |
%h | Hora (12 horas) | 03 |
%i | Minuto (relleno con ceros) | 30 |
%s | Segundo (relleno con ceros) | 45 |
%p | AM/PM | PM |
Ejemplos concretos usando DATE_FORMAT()
Formato japonés
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
Resultado
2025-02-01 15:30
Formato de 12 horas (con AM/PM)
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
Resultado
2025-02-01 03:30:45 PM
Formato de hora usando TIME_FORMAT()
TIME_FORMAT() es una función de formato especializada para datos de hora (TIME type).
Sintaxis básica de TIME_FORMAT()
SELECT TIME_FORMAT(NOW(), '%H:%i:%s');
Resultado
15:30:45
Convertir una cadena a una fecha usando STR_TO_DATE()
Use STR_TO_DATE() al convertir una fecha/hora en cadena al tipo DATETIME de MySQL.
Sintaxis básica de STR_TO_DATE()
SELECT STR_TO_DATE('2025-2-1 15:30', '%Y-%c-%e %H:%i');
Resultado
2025-02-01 15:30:00
Resumen
- Use
DATE_FORMAT()para cambiar el formato de fecha/hora TIME_FORMAT()también se puede usar para formato solo de hora- Puede combinar opciones de formato para cambiar libremente el formato de visualización
- Usando
STR_TO_DATE(), también puede convertir cadenas a tipos de fecha
4. Cálculos de fecha y hora usando la marca de tiempo actual de MySQL
Usando DATE_ADD() para obtener fechas futuras
Sintaxis básica de DATE_ADD()
SELECT DATE_ADD(NOW(), INTERVAL numeric_value time_unit);
Unidad de Tiempo | Significado | Ejemplo |
|---|---|---|
SECOND | Second | DATE_ADD(NOW(), INTERVAL 30 SECOND) |
MINUTE | Minute | DATE_ADD(NOW(), INTERVAL 10 MINUTE) |
HORA | Hora | DATE_ADD(NOW(), INTERVAL 2 HOUR) |
DÍA | Día | DATE_ADD(NOW(), INTERVAL 7 DAY) |
MES | Mes | DATE_ADD(NOW(), INTERVAL 3 MONTH) |
Obtener la fecha y hora 7 días después
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
Salida de ejemplo
2025-02-08 14:00:00
Usando DATE_SUB() para obtener fechas pasadas
Sintaxis básica de DATE_SUB()
SELECT DATE_SUB(NOW(), INTERVAL numeric_value time_unit);
Obtener la fecha 30 días atrás
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
Salida de ejemplo
2025-01-02 14:00:00
Usando TIMESTAMPDIFF() para encontrar la diferencia entre dos fechas y horas
Sintaxis básica de TIMESTAMPDIFF()
SELECT TIMESTAMPDIFF(unit, datetime1, datetime2);
Unidad | Valores Obtenidos |
|---|---|
SECOND | Diferencia en segundos |
MINUTE | Diferencia en minutos |
HORA | Diferencia en horas |
DÍA | Diferencia en días |
MES | Diferencia en meses |
Calcular la diferencia entre dos fechas en días
SELECT TIMESTAMPDIFF(DAY, '2025-01-01', NOW());
Salida de ejemplo
31
Usando DATEDIFF() para calcular la diferencia de días
SELECT DATEDIFF('2025-02-10', '2025-02-01');
Salida de ejemplo
9
Usando TIME_TO_SEC() para convertir hora a segundos
SELECT TIME_TO_SEC('01:30:00');
Salida
5400
Usando SEC_TO_TIME() para convertir segundos a hora
SELECT SEC_TO_TIME(5400);
Salida
01:30:00
Resumen
Función | Propósito | Ejemplo |
|---|---|---|
DATE_ADD() | Recuperar fecha y hora futuras | SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); |
DATE_SUB() | Recuperar fecha y hora pasadas | SELECT DATE_SUB(NOW(), INTERVAL 30 DAY); |
TIMESTAMPDIFF() | Obtener la diferencia entre dos fechas | SELECT TIMESTAMPDIFF(DAY, '2025-01-01', NOW()); |
DATEDIFF() | Obtener la diferencia entre dos fechas en días | SELECT DATEDIFF('2025-02-10', '2025-02-01'); |
TIME_TO_SEC() | Convertir tiempo a segundos | SELECT TIME_TO_SEC('01:30:00'); |
SEC_TO_TIME() | Convertir segundos a tiempo | SELECT SEC_TO_TIME(5400); |
5. Configuración de zona horaria y su impacto en la hora actual
Verificando la zona horaria actual de MySQL
Verificando la zona horaria predeterminada a nivel de sistema
SHOW VARIABLES LIKE '%time_zone%';
Salida de ejemplo
+-----------------+--------+
| Variable_name | Value |
+-----------------+--------+
| system_time_zone | UTC |
| time_zone | +00:00 |
+-----------------+--------+
Cambiando la zona horaria de MySQL
Cambiando la zona horaria por sesión
SET SESSION time_zone = 'Asia/Tokyo';
Cambiando la zona horaria a nivel de servidor (configurada en my.cnf)
[mysqld]
default-time-zone = '+09:00'
Reiniciar MySQL después de cambiar la configuración
sudo systemctl restart mysql
Cómo recuperar la hora UTC
SELECT UTC_TIMESTAMP();
Salida de ejemplo
2025-02-01 14:30:45
Convertir a una zona horaria diferente con CONVERT_TZ()
SELECT CONVERT_TZ(NOW(), 'Asia/Tokyo', 'UTC');
Salida
2025-02-01 14:30:45
Configurar zonas horarias diferentes por usuario
Convertir a la zona horaria del usuario
SELECT CONVERT_TZ(NOW(), 'UTC', 'America/New_York');
Salida de ejemplo
2025-02-01 09:30:45
La diferencia entre los tipos TIMESTAMP y DATETIME
Tipo de datos | Efecto de zona horaria | Ejemplo |
|---|---|---|
TIMESTAMP | Afectado (convertido a UTC) | Almacenado después de la conversión a UTC |
DATETIME | Inalterado (valor fijo) | Queda como |
Ejemplo de almacenamiento de datos para TIMESTAMP y DATETIME
CREATE TABLE time_test (
ts_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
dt_column DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO time_test () VALUES ();
SELECT * FROM time_test;
Salida de ejemplo
+---------------------+---------------------+
| ts_column | dt_column |
+---------------------+---------------------+
| 2025-02-01 14:30:45 | 2025-02-01 23:30:45 |
+---------------------+---------------------+
Resumen
- Verificar la zona horaria actual →
SHOW VARIABLES LIKE '%time_zone%'; - Cambiar por sesión →
SET SESSION time_zone = 'Asia/Tokyo'; - Cambiar el valor por defecto a nivel de servidor → Configurar
default-time-zone = '+09:00'enmy.cnf - Obtener la hora UTC →
SELECT UTC_TIMESTAMP(); - Conversión de zona horaria →
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo'); TIMESTAMPse ve afectado por las zonas horarias, mientras queDATETIMEes fijo

6. Casos de Uso Prácticos (Cómo usar la hora actual de MySQL en situaciones reales)
Gestión de Registros (Grabación de marcas de tiempo de creación y actualización de datos)
Crear Tabla (Incluyendo marcas de tiempo de creación y actualización)
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Insertar Datos
INSERT INTO logs (event) VALUES ('User logged in');
Actualizar Datos
UPDATE logs SET event = 'User changed password' WHERE id = 1;
Gestión de Programaciones (Cálculo automático de fechas futuras)
Programar un Evento una Semana Más Tarde
INSERT INTO schedule (event_name, event_date)
VALUES ('Project deadline', DATE_ADD(NOW(), INTERVAL 7 DAY));
Extraer Datos para un Período Específico
Obtener los Datos de Este Mes
SELECT * FROM orders
WHERE order_date BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE());
Registro de Historial de Acceso
Tabla para Registrar Registros de Acceso
CREATE TABLE access_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
access_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Registrar Acceso de Usuario
INSERT INTO access_logs (user_id) VALUES (123);
Gestión de Expiración de Datos
Eliminar Datos Antiguos a Más de 30 Días
DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
Resumen
Caso de uso | Función utilizada | Ejemplo |
|---|---|---|
| Gestión de registros | CURRENT_TIMESTAMP | created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| Gestión de horarios | DATE_ADD() | INSERT INTO schedule VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY)); |
| Recuperación de datos de período específico | BETWEENCURDATE() | SELECT * FROM orders WHERE order_date BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE()); |
| Registro de historial de acceso | TIMESTAMP | INSERT INTO access_logs (user_id) VALUES (123); |
| Eliminación de datos antiguos | DATE_SUB() | DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY); |
7. Errores Comunes y Solución de Problemas
NOW() no se puede recuperar en la zona horaria correcta
Causa
- La zona horaria por defecto de MySQL está configurada a UTC
- Los ajustes de zona horaria específicos de la sesión son incorrectos
Solución
Verificar la zona horaria actual
SHOW VARIABLES LIKE '%time_zone%';
Cambiar temporalmente la zona horaria
SET SESSION time_zone = 'Asia/Tokyo';
Cambiar la zona horaria por defecto a nivel de servidor
[mysqld]
default-time-zone = '+09:00'
Reiniciar MySQL para que los cambios surtan efecto.
CURRENT_TIMESTAMP devuelve una fecha/hora inesperada
Causa
- Usar una columna
TIMESTAMP(sujeta a efectos de zona horaria) - La zona horaria del servidor está configurada a UTC
Solución
Usar el tipo DATETIME evita efectos de zona horaria
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
Si se usa el tipo TIMESTAMP, convertir con CONVERT_TZ()
SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo') FROM logs;
Los resultados de TIMESTAMPDIFF() difieren de las expectativas
Causa
TIMESTAMPDIFF()redondea los cálculos por unidad- Ejemplo:
TIMESTAMPDIFF(DAY, '2025-02-01 23:59:59', '2025-02-02 00:00:01')→0 days
Solución
- Realizar cálculos más precisos en segundos
SELECT TIMESTAMPDIFF(SECOND, '2025-02-01 23:59:59', '2025-02-02 00:00:01');
Resultado
2
Elección entre TIMESTAMP y DATETIME
Tipo de datos | Efecto de zona horaria | Uso recomendado |
|---|---|---|
TIMESTAMP | Afectado (convertido a UTC) | Sistemas utilizados por usuarios de todo el mundo |
DATETIME | Inalterado (valor fijo) | Gestión estricta del tiempo local |
Cuando se usa TIMESTAMP
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Cuando se usa DATETIME
CREATE TABLE reservations (
id INT AUTO_INCREMENT PRIMARY KEY,
reserved_at DATETIME NOT NULL
);
Resumen
Error | Causa | Solution |
|---|---|---|
NOW() | La configuración de zona horaria del servidor difiere | SET SESSION time_zone = 'Asia/Tokyo'; |
CURRENT_TIMESTAMP | Efecto de | Use |
El resultado de | Impacto del error de redondeo | Use |
No entiendo la diferencia entre | Si la zona horaria les afecta | TIMESTAMPDATETIME |
Al manejar la hora actual de MySQL, entender la configuración y las características de los tipos de datos ayuda a prevenir errores inesperados.
8. Preguntas frecuentes (Preguntas y respuestas)
¿Cuál es la diferencia entre NOW() y CURRENT_TIMESTAMP?
Respuesta
En general, ambas tienen la misma funcionalidad, pero solo CURRENT_TIMESTAMP puede usarse al establecer el valor por defecto de una columna.
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
¿Cómo obtener la hora actual en UTC con MySQL?
Respuesta
Con la siguiente consulta, puedes obtener la hora UTC actual independientemente de la configuración de zona horaria de MySQL.
SELECT UTC_TIMESTAMP();
Además, si deseas convertir el resultado de NOW() a UTC, usa CONVERT_TZ().
SELECT CONVERT_TZ(NOW(), 'Asia/Tokyo', 'UTC');
¿Debería almacenarse la fecha y la hora en columnas separadas?
Respuesta
- Deseas almacenar fecha y hora juntas (registros, gestión de reservas)
CREATE TABLE reservations (
id INT AUTO_INCREMENT PRIMARY KEY,
reserved_at DATETIME NOT NULL
);
- Deseas gestionar fecha y hora por separado (horarios, etc.)
CREATE TABLE work_schedules (
id INT AUTO_INCREMENT PRIMARY KEY,
work_date DATE NOT NULL,
work_time TIME NOT NULL
);
¿Por qué cambia la zona horaria de NOW()?
Respuesta
Primero, verifiquemos la configuración actual.
SHOW VARIABLES LIKE '%time_zone%';
Para cambiar la configuración:
SET SESSION time_zone = 'Asia/Tokyo';
¿Se puede establecer la precisión de NOW() en milisegundos?
Respuesta
A partir de MySQL 5.6, puedes obtener segundos fraccionarios (milisegundos).
SELECT NOW(3);
Salida de ejemplo (ejemplo)
2025-02-01 14:30:45.123
Al almacenar datos con precisión de milisegundos
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3)
);
Resumen
NOW()yCURRENT_TIMESTAMPson básicamente iguales, pero usaCURRENT_TIMESTAMPpara valores por defecto de columnas- Usa
UTC_TIMESTAMP()para obtener la hora UTC DATETIMEes un valor fijo,TIMESTAMPse convierte según la zona horaria- Usa
NOW(3)para obtener milisegundos - Si la zona horaria cambia, ejecuta
SET SESSION time_zone = 'Asia/Tokyo';
9. Resumen
Cómo obtener la hora actual en MySQL
✅ NOW() → Obtener la fecha y hora actuales (YYYY-MM-DD HH:MM:SS)
✅ CURRENT_TIMESTAMP → Puede usarse como valor por defecto de una columna
✅ CURDATE() → Obtener solo la fecha de hoy
✅ CURTIME() → Obtener solo la hora actual
✅ UTC_TIMESTAMP() → Siempre obtener la hora UTC
Cómo formatear la hora actual en MySQL
✅ Usando DATE_FORMAT(), puedes convertir fechas y horas a un formato legible.
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
Cálculos de fechas usando la hora actual en MySQL
✅ Obtener una fecha futura
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
✅ Obtener una fecha pasada
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
✅ Calcular la diferencia entre dos fechas
SELECT TIMESTAMPDIFF(DAY, '2025-01-01', NOW());
✅ Convertir una hora a segundos
SELECT TIME_TO_SEC('01:30:00');
Gestión de zona horaria
✅ Verificar la zona horaria actual
SHOW VARIABLES LIKE '%time_zone%';
✅ Cambiar la zona horaria a Hora Estándar de Japón (JST)
SET SESSION time_zone = 'Asia/Tokyo';
✅ Cómo obtener la hora UTC
SELECT UTC_TIMESTAMP();
✅ Convertir hora con conocimiento de zona horaria
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
Casos de uso práctico
✅ Gestión de registros (grabación automática de marcas de tiempo de creación y actualización)
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
✅ Gestión de horarios (cálculo de fechas futuras)
INSERT INTO schedule (event_name, event_date)
VALUES ('Project deadline', DATE_ADD(NOW(), INTERVAL 7 DAY));
✅ Eliminar datos antiguos (eliminar registros con más de 30 días)
DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
Puntos clave
📌 Guía completa para obtener la hora actual en MySQL
📌 Explicación de cómo usar el formato y los cálculos de fechas
📌 Demostración de ejemplos prácticos útiles en escenarios del mundo real (gestión de registros, gestión de horarios, etc.)
📌 Discusión detallada de errores comunes y sus soluciones
La gestión del tiempo en MySQL es útil para una variedad de propósitos, como registro, manejo de expiración de datos y gestión de horarios. Domina las funciones adecuadas y podrás implementar el manejo del tiempo que cumpla con los requisitos de tu sistema.


