- 1 1. Pendahuluan
- 2 2. Cara Mengambil Waktu Saat Ini di MySQL
- 3 3. Cara Memformat Waktu Saat Ini di MySQL
- 4 4. Perhitungan Tanggal/Waktu Menggunakan Waktu Saat Ini di MySQL
- 5 5. Pengaturan Zona Waktu MySQL
- 6 6. Cara Menetapkan Waktu Saat Ini sebagai Nilai Default di MySQL
- 7 7. Kesalahan Umum MySQL dan Solusinya (FAQ)
- 8 8. Praktik Terbaik untuk Menangani Waktu Saat Ini di MySQL
1. Pendahuluan
Kapan Anda Perlu Menangani Waktu Saat Ini di MySQL?
Di MySQL, mengambil waktu saat ini diperlukan dalam banyak skenario yang berbeda. Misalnya, kasus penggunaan berikut umum:
- Secara otomatis menyisipkan cap waktu saat mendaftarkan data
- Misalnya, merekam tanggal dan waktu pembuatan saat menyimpan data pesanan atau data log.
- Menyaring data berdasarkan waktu saat ini
- Misalnya, mengambil hanya data dari 7 hari terakhir atau mencari catatan dengan tanggal di masa depan.
- Memformat tanggal dan waktu untuk ditampilkan
- Memformat nilai tanggal dan waktu untuk keterbacaan yang lebih baik saat menghasilkan laporan.
- Mengelola kedaluwarsa data menggunakan waktu saat ini
- Misalnya, menentukan apakah kupon masih berlaku dengan membandingkannya dengan waktu saat ini.
Seperti yang Anda lihat, mengambil dan memanipulasi waktu saat ini dengan benar di MySQL adalah keterampilan penting dalam manajemen basis data.
Apa yang Akan Anda Pelajari dalam Artikel Ini
Artikel ini menjelaskan topik-topik berikut secara detail:
- Cara mengambil waktu saat ini di MySQL (
NOW(),CURRENT_TIMESTAMP, dll.) - Cara mengubah format tanggal dan waktu (menggunakan
DATE_FORMAT()) - Perhitungan tanggal dan waktu menggunakan waktu saat ini (menggunakan
INTERVAL) - Cara mengubah zona waktu (
SET SESSION time_zone) - Menggunakan waktu saat ini sebagai nilai default (
CURRENT_TIMESTAMP) - Kesalahan umum dan cara memperbaikinya (FAQ)
Dari dasar hingga penggunaan lanjutan dalam menangani “waktu saat ini” di MySQL, panduan ini menyediakan contoh SQL praktis. Pastikan untuk membaca sampai akhir.
2. Cara Mengambil Waktu Saat Ini di MySQL
Daftar Fungsi untuk Mengambil Waktu Saat Ini di MySQL
MySQL menyediakan beberapa fungsi untuk mengambil waktu saat ini. Pahami perbedaannya dan gunakan secara tepat.
| Function | Returns | Example |
|---|---|---|
NOW() | Current date and time (date + time) | SELECT NOW(); → 2025-02-11 16:00:00 |
CURRENT_TIMESTAMP | Same as NOW() (SQL standard) | SELECT CURRENT_TIMESTAMP; |
CURDATE() | Current date only | SELECT CURDATE(); → 2025-02-11 |
CURTIME() | Current time only | SELECT CURTIME(); → 16:00:00 |
Fungsi NOW()
NOW() adalah fungsi yang paling umum digunakan di MySQL untuk mengambil waktu saat ini.
Ia mengembalikan baik tanggal maupun waktu.
SELECT NOW();
Contoh output:
2025-02-11 16:00:00
NOW()mengembalikan waktu sistem saat ini.- Karena dipengaruhi oleh zona waktu, waktu yang ditampilkan dapat berbeda tergantung pada lingkungan Anda (dijelaskan secara detail di bagian “Pengaturan Zona Waktu”).
Cara Menggunakan CURRENT_TIMESTAMP
CURRENT_TIMESTAMP berperilaku hampir sama dengan NOW(). Ia sesuai dengan standar SQL dan juga dapat digunakan di basis data lain.
SELECT CURRENT_TIMESTAMP;
Contoh output:
2025-02-11 16:00:00
Dapatkan Hanya Tanggal dengan CURDATE()
CURDATE() digunakan ketika Anda ingin mengambil hanya tanggal saat ini (tahun, bulan, hari).
SELECT CURDATE();
Contoh output:
2025-02-11
Dapatkan Hanya Waktu dengan CURTIME()
Jika Anda ingin mengambil hanya waktu saat ini (jam, menit, detik), gunakan CURTIME().
SELECT CURTIME();
Contoh output:
16:00:00
Fungsi Mana yang Harus Anda Gunakan?
| Purpose | Recommended Function |
|---|---|
| Retrieve both date and time | NOW() or CURRENT_TIMESTAMP |
| Retrieve date only | CURDATE() |
| Retrieve time only | CURTIME() |
3. Cara Memformat Waktu Saat Ini di MySQL
Pemformatan Kustom dengan DATE_FORMAT()
Sintaks Dasar DATE_FORMAT()
Di MySQL, Anda dapat menggunakan fungsi DATE_FORMAT() untuk mengubah format tanggal dan waktu secara bebas.
SELECT DATE_FORMAT(datetime_value, 'format_specifiers');
Contoh: Mengonversi NOW() ke format YYYY/MM/DD HH:MM
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
Output:
2025/02/11 16:45
Daftar Penentu Format Umum
| Specifier | Meaning | Example (2025-02-11 16:45:30) |
|---|---|---|
%Y | 4-digit year | 2025 |
%m | 2-digit month (01-12) | 02 |
%d | 2-digit day (01-31) | 11 |
%H | Hour (00-23, 24-hour format) | 16 |
%i | Minutes (00-59) | 45 |
%s | Seconds (00-59) | 30 |
Ekstrak Hanya Bagian Waktu dengan TIME()
Jika Anda ingin mengekstrak hanya bagian waktu dari datetime yang dikembalikan oleh NOW(), gunakan fungsi TIME().
SELECT TIME(NOW());
Output:
16:45:30
Ekstrak Bagian dengan YEAR(), MONTH(), dan DAY()
Untuk mengekstrak hanya bagian tertentu, gunakan fungsi-fungsi berikut.
| Function | Returns | SQL | Output Example (2025-02-11 16:45:30) |
|---|---|---|---|
YEAR() | Year | SELECT YEAR(NOW()); | 2025 |
MONTH() | Month | SELECT MONTH(NOW()); | 2 |
DAY() | Day | SELECT DAY(NOW()); | 11 |
Contoh Praktis Pemformatan
SQL berikut berguna untuk mencoba berbagai format dalam praktik.
SELECT
NOW() AS 'Original datetime',
DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
TIME(NOW()) AS 'Time only',
YEAR(NOW()) AS 'Year',
MONTH(NOW()) AS 'Month',
DAY(NOW()) AS 'Day';

4. Perhitungan Tanggal/Waktu Menggunakan Waktu Saat Ini di MySQL
Tambah/Kurang dengan INTERVAL
Sintaks Dasar
SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;
Tambah Waktu Berdasarkan NOW()
Sebagai contoh, untuk mengambil datetime “satu minggu kemudian”:
SELECT NOW() + INTERVAL 7 DAY;
Contoh Output:
2025-02-18 16:30:00
| Unit | Meaning | Example |
|---|---|---|
| SECOND | Seconds | NOW() + INTERVAL 10 SECOND |
| MINUTE | Minutes | NOW() + INTERVAL 5 MINUTE |
| HOUR | Hours | NOW() + INTERVAL 2 HOUR |
| DAY | Days | NOW() + INTERVAL 10 DAY |
| MONTH | Months | NOW() + INTERVAL 3 MONTH |
Hitung Selisih Antara Dua Tanggal dengan DATEDIFF()
SELECT DATEDIFF(NOW(), '2025-01-01');
Contoh Output:
30
Filter Berdasarkan Rentang Tanggal dengan BETWEEN
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
5. Pengaturan Zona Waktu MySQL
Periksa Zona Waktu Saat Ini
SHOW VARIABLES LIKE '%time_zone%';
Contoh Output:
+------------------+----------------+
| Variable_name | Value |
+------------------+----------------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+----------------+
Ubah Zona Waktu per Sesi
SET SESSION time_zone = 'Asia/Tokyo';
Ubah Zona Waktu Default Server
Tambahkan berikut ke file konfigurasi (my.cnf):
[mysqld]
default_time_zone = 'Asia/Tokyo'
Dapatkan Waktu UTC dengan UTC_TIMESTAMP
SELECT UTC_TIMESTAMP();
Konversi ke Waktu Lokal dengan CONVERT_TZ()
SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');
6. Cara Menetapkan Waktu Saat Ini sebagai Nilai Default di MySQL
Tetapkan CURRENT_TIMESTAMP sebagai Nilai Default
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Pembaruan Otomatis dengan ON UPDATE CURRENT_TIMESTAMP
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Perbedaan Antara DATETIME dan TIMESTAMP
| Type | Affected by Time Zone | Can Set CURRENT_TIMESTAMP as Default |
|---|---|---|
TIMESTAMP | Yes | Yes |
DATETIME | No | No |
Mengapa Anda Tidak Dapat Menggunakan NOW() sebagai Nilai Default dan Solusinya
ERROR 1067 (42000): Invalid default value for 'created_at'
Solusi:
CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
7. Kesalahan Umum MySQL dan Solusinya (FAQ)
Tidak Dapat Menggunakan NOW() sebagai Nilai Default
Contoh Kesalahan
CREATE TABLE logs (
created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'
Solusi
CREATE TABLE logs (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Waktu CURRENT_TIMESTAMP Tidak Benar
SHOW VARIABLES LIKE 'time_zone';
Solusi
SET SESSION time_zone = 'Asia/Tokyo';
Hasil NOW() Salah Satu Jam
SHOW VARIABLES LIKE 'system_time_zone';
Solusi
SET GLOBAL time_zone = 'Asia/Tokyo';
Penyaringan Rentang BETWEEN Tidak Berfungsi Seperti yang Diharapkan
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';
Solusi
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
8. Praktik Terbaik untuk Menangani Waktu Saat Ini di MySQL
Kapan Menggunakan NOW() vs CURRENT_TIMESTAMP
| Use Case | Recommended |
|---|---|
Retrieve the current time in a SELECT statement | NOW() |
Automatically set the current time during INSERT | CURRENT_TIMESTAMP |
Set as the default value of a TIMESTAMP column | CURRENT_TIMESTAMP |
Kapan Menggunakan TIMESTAMP vs DATETIME
| Data Type | Affected by Time Zone | Storage Size |
|---|---|---|
TIMESTAMP | Yes | 4 bytes |
DATETIME | No | 8 bytes |
Simpan dalam UTC dan Konversi ke Waktu Lokal
SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');
Gunakan >= dan < Alih-alih BETWEEN
SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00'
AND created_at < '2025-03-01 00:00:00';
Standarisasi Penggunaan INTERVAL
SELECT NOW() + INTERVAL 1 DAY;
Bersihkan Data Lama Secara Tepat
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;


