Format tanggal PHP adalah string yang hurufnya mewakili bagian-bagian tanggal: date('Y-m-d H:i:s') mencetak sesuatu seperti 2026-03-14 09:05:07. Y adalah tahun 4 digit, m bulan, d hari, H jam (format 24 jam), i menit, dan s detik; karakter apa pun yang bukan huruf format, seperti -, /, atau :, dicetak apa adanya. String format yang sama bekerja di date() maupun di DateTimeImmutable::format().
Ubah $format lalu tekan Jalankan. Tanggalnya dikunci pada Sabtu, 14 Maret 2026 pukul 09:05:07, jadi kamu bisa melihat persis apa yang dilakukan setiap huruf:
Output:
Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM
date($format) memformat saat ini dan date($format, $timestamp) memformat sebuah timestamp; $date->format($format) memformat objek tanggal. Semua hal lain tentang tanggal, dari strtotime() sampai zona waktu, ada di halaman PHP date().
Karakter format tanggal
Setiap contoh di bawah ini adalah hasil untuk 2026-03-14 09:05:07.123456 UTC.
Hari
| Karakter | Arti | Contoh |
|---|---|---|
d | Tanggal dalam bulan, 2 digit dengan nol di depan (01 sampai 31) | 14 |
j | Tanggal dalam bulan tanpa nol di depan (1 sampai 31) | 14 |
D | Nama hari singkat, 3 huruf | Sat |
l (huruf L kecil) | Nama hari lengkap | Saturday |
N | Hari dalam minggu versi ISO, 1 (Senin) sampai 7 (Minggu) | 6 |
w | Hari dalam minggu, 0 (Minggu) sampai 6 (Sabtu) | 6 |
S | Akhiran bahasa Inggris untuk tanggal: st, nd, rd, atau th. Pakai setelah j | th |
z | Hari ke berapa dalam tahun, mulai dari 0 | 72 |
Minggu dan bulan
| Karakter | Arti | Contoh |
|---|---|---|
W | Nomor minggu ISO 8601 (minggu dimulai hari Senin) | 11 |
F | Nama bulan lengkap | March |
M | Nama bulan singkat, 3 huruf | Mar |
m | Nomor bulan dengan nol di depan (01 sampai 12) | 03 |
n | Nomor bulan tanpa nol di depan (1 sampai 12) | 3 |
t | Jumlah hari dalam bulan itu | 31 |
Tahun
| Karakter | Arti | Contoh |
|---|---|---|
Y | Tahun lengkap, minimal 4 digit | 2026 |
y | Tahun, 2 digit | 26 |
L | 1 kalau tahun kabisat, selain itu 0 | 0 |
o | Tahun penomoran minggu ISO 8601 (pakai bersama W) | 2026 |
X | Tahun lengkap yang diperluas, dengan tanda (PHP 8.2+) | +2026 |
x | Tahun lengkap yang diperluas, tanda hanya kalau perlu (PHP 8.2+) | 2026 |
Waktu
| Karakter | Arti | Contoh |
|---|---|---|
H | Jam, format 24 jam, dengan nol di depan (00 sampai 23) | 09 |
G | Jam, format 24 jam, tanpa nol di depan (0 sampai 23) | 9 |
h | Jam, format 12 jam, dengan nol di depan (01 sampai 12) | 09 |
g | Jam, format 12 jam, tanpa nol di depan (1 sampai 12) | 9 |
i | Menit dengan nol di depan (00 sampai 59) | 05 |
s | Detik dengan nol di depan (00 sampai 59) | 07 |
a | am atau pm | am |
A | AM atau PM | AM |
v | Milidetik | 123 |
u | Mikrodetik (selalu 000000 di date(), yang hanya menerima detik bulat) | 123456 |
B | Swatch Internet time (000 sampai 999) | 420 |
Zona waktu
| Karakter | Arti | Contoh |
|---|---|---|
e | Identifier zona waktu | UTC |
T | Singkatan zona waktu | UTC |
P | Selisih dari UTC dengan titik dua | +00:00 |
p | Seperti P, tetapi Z untuk UTC | Z |
O | Selisih dari UTC tanpa titik dua | +0000 |
Z | Selisih dalam detik | 0 |
I (huruf i kapital) | 1 selama daylight saving time, selain itu 0 | 0 |
Tanggal dan waktu lengkap
| Karakter | Arti | Contoh |
|---|---|---|
c | Tanggal dan waktu ISO 8601 | 2026-03-14T09:05:07+00:00 |
r | Tanggal RFC 2822, dipakai di header email | Sat, 14 Mar 2026 09:05:07 +0000 |
U | Unix timestamp (detik sejak 1970-01-01 UTC) | 1773479107 |
Tabel yang sama, dalam versi langsung: blok ini mencetak setiap karakter untuk tanggal yang kamu pilih. Masukkan tanggal ulang tahunmu, tanggal di sore hari, atau tanggal di akhir tahun kabisat:
Mencetak huruf dan kata di dalam format
Setiap huruf dalam string format dibaca sebagai karakter format, jadi 'Today is l' tidak mencetak "Today is": T, o, d, a, y, i, dan s semuanya karakter format. Taruh backslash sebelum setiap huruf yang ingin dicetak apa adanya. Dalam string berkutip ganda, \t sudah berarti karakter tab, jadi pakai kutip tunggal untuk format yang mengandung backslash:
Output:
UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 09UTC 14th
Format tanggal yang umum
Kebanyakan kode hanya butuh beberapa format. Blok ini mencetaknya sebagai tabel HTML, jadi hasilnya tampil di tab Halaman:
Simpan dan bandingkan tanggal dalam format Y-m-d atau Y-m-d H:i:s: string dengan urutan itu terurut sama seperti tanggalnya, sedangkan string d/m/Y tidak.
ISO 8601, DATE_ATOM, dan format standar lainnya
PHP punya konstanta untuk format yang diharapkan API, feed, dan cookie. DATE_ATOM (juga DateTimeInterface::ATOM) adalah ISO 8601 dan RFC 3339, format yang dipakai API JSON:
Output:
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07.000+00:00
Sat, 14 Mar 2026 09:05:07 +0000
Sat, 14 Mar 2026 09:05:07 +0000
Saturday, 14-Mar-2026 09:05:07 UTC
Y-m-d\TH:i:sP
Ada juga konstanta DATE_ISO8601, tetapi offset-nya tidak memakai titik dua (+0000), yang tidak diizinkan ISO 8601 dalam bentuk itu; pakai DATE_ATOM.
Format tanggal Jepang (Y年m月d日)
Karakter yang bukan huruf format dicetak apa adanya, termasuk kanji, jadi 'Y年n月j日' bekerja seperti yang tertulis. n dan j menghilangkan nol di depan (3月14日), sedangkan m dan d mempertahankannya (03月14日). Nama hari adalah satu-satunya bagian yang tidak bisa diterjemahkan date(), karena fungsi itu hanya tahu nama dalam bahasa Inggris; petakan angka w ke list buatanmu sendiri:
Output:
2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14
Untuk lokalisasi penuh, termasuk nama bulan dalam bahasa lain dan era Jepang (令和), IntlDateFormatter dari ekstensi intl memformat dengan pola locale. Class ini memakai huruf pola ICU (yyyy, MM, EEEE), bukan karakter PHP di halaman ini:
<?php
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Asia/Tokyo');
echo $formatter->format(new DateTimeImmutable('2026-03-14')); // 2026年3月14日土曜日
$era = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo $era->format(new DateTimeImmutable('2026-03-14')); // 令和8年3月14日
Mengubah tanggal dari satu format ke format lain
Untuk mengubah 14/03/2026 menjadi 2026-03-14, parse string-nya dengan format yang dipakainya menggunakan DateTimeImmutable::createFromFormat(), lalu format ulang. Fungsi ini memakai karakter yang sama dengan tabel di atas. Awali formatnya dengan !, karena kalau tidak, field yang tidak kamu berikan (di sini, jamnya) akan diisi dari waktu saat ini:
Output:
2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
[10] => The parsed date was invalid
)
Untuk tanggal yang diketik pengguna, anggap setiap warning dari getLastErrors() sebagai tanggal yang tidak valid, sama seperti saat kamu mendapat false.
Kesalahan umum dengan format tanggal
Tiga bug ini muncul berulang kali: m padahal yang dimaksud i, Y versus y, dan membiarkan strtotime() menebak urutan hari dan bulan. strtotime() membaca garis miring sebagai urutan bulan/hari ala Amerika, dan tanda strip atau titik sebagai urutan hari-bulan, jadi angka yang sama menghasilkan dua tanggal berbeda:
Output:
09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)
Kalau kamu tahu format input-nya, sebutkan dengan createFromFormat() alih-alih membiarkan strtotime() menebak.
Pertanyaan yang sering diajukan
Apa arti date('Y-m-d') di PHP?
Setiap huruf diganti dengan bagian dari tanggal: Y adalah tahun 4 digit, m bulan dengan nol di depan, dan d hari dengan nol di depan, sedangkan tanda strip dicetak apa adanya. Pada 14 Maret 2026, hasilnya 2026-03-14.
Bagaimana cara mengubah format tanggal di PHP?
Parse tanggalnya dengan format aslinya, lalu format dengan format yang kamu mau: DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') mengembalikan 2026-03-14. createFromFormat() mengembalikan false kalau string-nya tidak cocok, jadi periksa itu dulu.
Apa bedanya m dan i dalam format tanggal PHP?
m adalah bulan (01 sampai 12) dan i adalah menit (00 sampai 59). Menulis 'H:m' alih-alih 'H:i' adalah bug yang umum: jamnya menampilkan nomor bulan di tempat yang seharusnya menit.
Bagaimana cara memformat tanggal sebagai ISO 8601 di PHP?
Pakai karakter c atau konstanta DATE_ATOM: $date->format(DATE_ATOM) mengembalikan 2026-03-14T09:05:07+00:00. Hindari DATE_ISO8601: offset-nya tidak memakai titik dua (+0000), yang bukan ISO 8601 yang valid.
Bagaimana cara menampilkan nama hari dalam bahasa Jepang dengan date() di PHP?
date() hanya mencetak nama dalam bahasa Inggris, jadi petakan angka w (0 untuk Minggu sampai 6 untuk Sabtu) ke list buatanmu sendiri: ['日','月','火','水','木','金','土'][$date->format('w')]. Dengan ekstensi intl, IntlDateFormatter bisa memformat tanggal lengkap dalam locale apa pun.