Site icon Mawan.NET

Menghitung Tanggal Sebulan Yang Lalu

Artikel ini mungkin menarik bagi anda yang sedang membuat aplikasi billing (atau aplikasi penggajian), di mana billing muncul tiap tanggal 1 untuk memakaian bulan sebelumnya, yaitu dari tanggal 1 sampai tanggal 28, 29, 30 atau 31.

Misalkan sekarang tanggal 2. Sehari sebelum tanggal ini adalah tanggal berapa? Jawabannya sangat mudah yaitu tanggal 1. Ini bisa didapat dengan pemakaian fungsi date dan strtotime seperti ini:

echo date('Y-m-d', strtotime('-1 day'));

Demikian juga untuk menghitung 1 bulan sebelumnya. Misalkan sekarang tanggal 6 Mei 2023. Maka sebulan yang lalu adalah tanggal 6 April 2023 dan dua bulan lalu adalah 6 Maret 2023. Ini mudah, sebab semua bulan mengandung angka 6. String yang dipakai adalah: -1 month dan -2 months.

Tapi bagaimana bila sekarang adalah 31 Mei 2023? Sebulan lalu bukan 31 April 2023 karena di bulan April tidak ada tanggal 31. Juga bukan 1 Mei 2023. Harusnya dimajukan 1 hari menjadi 30 April 2023 (yaitu tanggal paling akhir di bulan April).

Pertanyaannya: Bagaimana program PHP-nya?

Jawaban singkatnya: Gunakan string last day of -1 month. Kodenya bisa bermacam-macam. Ini salah satunya.

<?php
$sekarang = '2023-05-31';

// Memakai Immutable agar tanggal tidak berubah ketika dikurangi.
$tanggal = new DateTimeImmutable($sekarang);

// Memakai metode modify().
$satubulan = $tanggal->modify('last day of -1 month')->format('Y-m-d');
$duabulan = $tanggal->modify('last day of -2 months')->format('Y-m-d');
$tigabulan = $tanggal->modify('last day of -3 months')->format('Y-m-d');

echo "Misalkan sekarang tanggal $sekarang<br>\n";
echo "Satu bulan lalu adalah $satubulan<br>\n";
echo "Dua bulan lalu adalah $duabulan<br>\n";
echo "Tiga bulan lalu adalah $tigabulan<br>\n";

Hasilnya adalah:

Misalkan sekarang tanggal 2023-05-31
Satu bulan lalu adalah 2023-04-30
Dua bulan lalu adalah 2023-03-31
Tiga bulan lalu adalah 2023-02-28

Jangan memakai $tanggal->modify(‘-1 month’) karena hasilnya adalah 1 Mei 2023 yang tentunya bukan ini yang diharapkan.

Alternatif lain (bila tidak mau memakai class DateTime atau DateTimeImmutable) adalah memakai fungsi strtotime. Sebelum PHP versi 5.2.0, para programmer memakai fungsi strtotime untuk melakukan operasi perhitungan tanggal. Berikut ini adalah contoh pemakaian fungsi strtotime untuk melakukan perhitungan serupa yang dilakukan oleh contoh program sebelumnya.

<?php
$sekarang = "2023-05-31";

// Memakai fungsi strtotime().
$satubulan = date('Y-m-d', strtotime('last day of -1 month', strtotime($sekarang)));
$duabulan = date('Y-m-d', strtotime('last day of -2 months', strtotime($sekarang)));
$tigabulan = date('Y-m-d', strtotime('last day of -3 months', strtotime($sekarang)));

echo "Misalkan sekarang tanggal $sekarang<br>\n";
echo "Satu bulan lalu adalah $satubulan<br>\n";
echo "Dua bulan lalu adalah $duabulan<br>\n";
echo "Tiga bulan lalu adalah $tigabulan<br>\n";

Penjelasan

DateTime pada PHP adalah kelas bawaan (built-in class) yang digunakan untuk memanipulasi data tanggal dan waktu dalam format objek. Kelas DateTime memungkinkan kita untuk membuat objek dari data tanggal dan waktu, lalu melakukan berbagai operasi pada objek tersebut seperti menambah atau mengurangi tanggal, mengubah format tanggal, membandingkan dua tanggal, dan banyak lagi.

Dengan menggunakan kelas DateTime pada PHP, kita dapat dengan mudah mengelola tanggal dan waktu dalam format yang berbeda, seperti format ISO 8601, format MySQL, atau format kustom yang ditentukan oleh kita. Selain itu, kelas DateTime juga menyediakan banyak metode dan properti bawaan yang memudahkan kita untuk melakukan operasi pada objek tanggal dan waktu, seperti format(), add(), sub(), diff(), setTimeZone(), dan lain-lain.

Dalam PHP, objek DateTime dapat dibuat dengan menggunakan sintaks “new DateTime()”, diikuti dengan tanggal dan waktu dalam format tertentu. Selain itu, terdapat juga kelas DateTimeImmutable yang memungkinkan kita untuk membuat objek tanggal dan waktu yang tidak dapat diubah setelah objek dibuat.

Class DateTime tersedia mulai dari PHP versi 5.2.0 dan seterusnya. Sebelum PHP versi 5.2.0, untuk memanipulasi tanggal dan waktu pada PHP, biasanya digunakan fungsi-fungsi bawaan seperti `date()`, `strtotime()`, dan `mktime()`. Namun, dengan adanya kelas DateTime pada PHP versi 5.2.0, kita dapat dengan mudah memanipulasi tanggal dan waktu dengan menggunakan objek yang lebih terstruktur dan lebih kuat.

Selain kelas DateTime, PHP juga menyediakan beberapa kelas terkait lainnya seperti DateTimeZone dan DateInterval untuk memudahkan kita dalam melakukan manipulasi tanggal dan waktu dalam berbagai zona waktu atau interval waktu yang berbeda. Dalam versi PHP yang lebih baru seperti PHP 7.x, kelas DateTime juga telah ditingkatkan dengan tambahan fitur-fitur baru yang lebih powerful dan fleksibel.

Exit mobile version