Tanggal dan kalendar merupakan hal yang cukup sulit untuk dihitung dalam pemrograman. Sebagai contoh jika tanggal 27 Februari ditambah dengan 2 hari maka hasilnya adalah tanggal 1 maret bukan tanggal 29 Februari, kecuali untuk tahun kabisat. Operasi tambah dan kurang matematika dasar tidak bisa digunakan dalam menghitung tanggal. Ada variable variable lain yang perlu diperhitungkan, seperti jumlah hari untuk tiap bulan, apakah tahun kabisat atau tidak. Untungnya PHP memiliki class DateTime yang bisa digunakan untuk menambah dan mengurangi tanggal.
Video Tutorial Tambah dan Kurang Tanggal di PHP
Untuk menambah tanggal kita perlu membuat object DateTime terlebih dahulu. Class DateTime menerima masukan string tanggal dalam format tertentu. Paling umum adalah menggunakan format ISO yaitu Y-m-d
, jika dengan waktu Y-m-dTH:i:s
. Contoh 2022-02-27
atau 2022-02-27T10:01:50
. Untuk membuat object DateTime gunakan kata kunci new seperti.
$tanggal = new DateTime('2022-02-27');
$tanggal = new DateTime('2022-02-27T10:01:50');
Sedangkan untuk menambah tanggal kita menggunakan fungsi add
yang menerima input object DateInterval
. Untuk membuat object DateInterval kita kembali menggunakan kata kunci new. Dimana class DateInterval menerima masukan string durasi, dengan format sebagai berikut. Selalu diawali dengan P
diikuti dengan angka (integer) dan penujuk periode, jika periode berisi waktu di depannya harus ditambah dengan T
. Di bawah adalah tabel penunjuk periode.
Penunjuk Periode | Keterangan |
---|---|
Y | Tahun |
M | bulan |
D | hari |
W | minggu, sebelum php 8 tidak bisa digabungkan dengan D |
H | jam |
M | menit |
S | detik |
Berikut contoh sederhana P2D
artinya 2 hari, P2M3D
dua bulan 3 hari, P2DT2H2M
dua hari dan 2 jam 2 menit. Format ini adalah berdasarkan ISO 8601.
Di bawah adalah beberapa contoh operasi tambah tanggal di php
// Tambah 2 hari
$tanggal = new DateTime('2022-02-27');
$tanggal->add(new DateInterval('P2D');
echo $tanggal->format('d-m-Y'); // hasilnya: 01-03-2022
// Tambah 1 bulan
$tanggal = new DateTime('2022-02-27');
$tanggal->add(new DateInterval('P2M');
echo $tanggal->format('d-m-Y'); // hasilnya: 27-03-2022
// Tambah 2 hari 2 jam
$tanggal = new DateTime('2022-02-27T10:05:10');
$tanggal->add(new DateInterval('P2DT2H');
echo $tanggal->format('d-m-Y H:i:s'); // hasilnya: 01-03-2022 12:05:10
Sama seperti operasi tambah, operasi kurang menggunakan fungsi sub
yang sama sama menerima input DateInterval. Di bawah adalah beberapa contoh operasi kurang tanggal.
// Kurang 2 hari
$tanggal = new DateTime('2022-02-27');
$tanggal->sub(new DateInterval('P2D');
echo $tanggal->format('d-m-Y'); // hasilnya: 25-02-2022
// Kurang 1 bulan
$tanggal = new DateTime('2022-02-27');
$tanggal->add(new DateInterval('P2M');
echo $tanggal->format('d-m-Y'); // hasilnya: 27-01-2022
// Kurang 2 hari 2 jam
$tanggal = new DateTime('2022-02-27T10:05:10');
$tanggal->add(new DateInterval('P2DT2H');
echo $tanggal->format('d-m-Y H:i:s'); // hasilnya: 25-02-2022 08:05:10
Class DateTimeImmutable
memiliki fungsionalitas yang sama seperti DateTime
tetapi akan mengembalikan object DateTime
baru saat di melakukan operasi tambah dan kurang sehingga nilai dari object tanggal awal tidak mengalami perubahan. Berikut adalah contoh penggunaanya dan perbedaannya.
$tanggal = new DateTimeImmutable('2022-02-27');
$tanggal2 = $tanggal->add(new DateInterval('P2D');
echo $tanggal2->format('d-m-Y'); // hasilnya: 01-03-2022
echo $tanggal->format('d-m-Y'); // nilainya tetap tidak berubah 27-02-2022
Sedangkan menggunakan DateTime
$tanggal = new DateTime('2022-02-27');
$tanggal2 = $tanggal->add(new DateInterval('P2D');
echo $tanggal2->format('d-m-Y'); // hasilnya: 01-03-2022
echo $tanggal->format('d-m-Y'); // nilanya akan berubah menjadi 01-03-2022 juga