2. Tanggal dan Waktu (Objek)

PHP: Bekerja Dengan Tanggal Dan Waktu (Pendekatan Objek)

Pertemuan sebelumnya kita telah membahas cara bekerja dengan tanggal dan waktu pada PHP dengan pendekatan prosedural. Pada pertemuan kali ini, kita masih akan berkutat dengan pembahasan tersebut, akan tetapi kita akan melakukannya dengan pendekatan objek. Yaitu dengan menggunakan fungsi-fungsi yang ada pada kelas bawaan PHP bernama DateTime.

Inisialisasi Tanggal dan Waktu

<?php

$hariIni = new DateTime();

echo $hariIni->format('d-m-Y H:i') . '<br>';

Output:

10-02-2020 14:50
<?php

$hariIni = new DateTime("2020-02-10 14:53"); 
$awalFebruari = new DateTime("1st February 2020 01:00"); 

echo $hariIni->format('d-m-Y H:i') . '<br>';
echo $awalFebruari->format('d-m-Y H:i') . '<br>';

Output:

10-02-2020 14:53
01-02-2020 01:00

Format Tanggal dan Waktu

Sama seperti pendekatan prosedural dengan fungsi date(), kita juga bisa melakukan pemformatan tanggal dan waktu pada kelas DateTime dengan kode yang sama.

Perhatikan beberapa contoh berikut:

<?php

$hariIni = new DateTime();

echo $hariIni->format('l F Y, H:i') . '<br>';
echo $hariIni->format('D M y, H:i') . '<br>';
echo $hariIni->format('d-m-Y, h:iA') . '<br>';

Output:

Wednesday February 2020, 17:24
Wed Feb 20, 17:24
19-02-2020, 05:24PM

Timestamp

Timestamp adalah jarak waktu dari tanggal 1 Januari 1970 pukul 00:00 ke tanggal dan jam sekarang. Jarak tersebut didefinisikan dalam satuan detik.

Timestamp merupakan data dengan tipe integer dan ia adalah satuan data yang diakui di berbagai macam sistem dan bahasa pemrograman.

Pada tutorial sebelumnya kita telah belajar bagaimana cara mengetahui timestamp waktu sekarang dan bagaimana cara mengkonversinya ke bentuk tanggal dan waktu yang bisa dibaca manusia.

Dan sekarang, kita akan melakukan hal yang sama akan tetapi menggunakan kelas DateTime.

Konversi DateTime ke timestamp

Kita bisa mengkonversi instan dari kelas DateTime ke dalam timestamp dengan memanggil fungsi getTimestamp().

Perhatikan contoh berikut:

<?php

$hariIni = new DateTime("2020-12-31");

echo "Tanggal: " . $hariIni->format('d-m-Y') . '<br>';
echo "Timestamp: " . $hariIni->getTimestamp() . " <br>";

Output:

Tanggal: 31-12-2020
Timestamp: 1609347600

Konversi timestamp ke DateTime

Jika kita memiliki data berupa timestamp lalu ingin mengubahnya ke dalam instan DateTime, kita bisa melakukannya dengan membuat instan DateTime terlebih dahulu, lalu memanggil fungsi setTimestamp() untuk mengkonversinya.

Perhatikan contoh berikut:

<?php

$timestamp = 1234567890;

$hariIni = new DateTime();
$hariIni->setTimestamp($timestamp);

echo "Timestamp: {$timestamp} <br>";
echo "Tanggal: " . $hariIni->format('d-m-Y') . '<br>';

Output:

Timestamp: 1234567890
Tanggal: 14-02-2009

Mengganti Lokalisasi

Jika kita ingin agar nama hari dan nama bulan ditampilkan dengan Bahasa Indonesia, kita bisa melakukannya dengan mengubah lokalisasi PHP menjadi Bahasa Indonesia. Sehingga teks yang awalnya seperti ini:

Wednesday February 2020, 17:24
Wed Feb 20, 17:24

Berubah menjadi:

Rabu 19 Februari 2020, 20:11
Rab 19 Feb 2020, 20:11

Bagaimana caranya? Insyaallah akan kita bahas pada pertemuan selanjutnya.

Pengaturan Time Zone

Secara umum untuk pengaturan time zone atau zona waktu, kita bisa mengaturnya dengan dua cara:

  • lewat pengaturan file php.ini
  • atau dengan memanggil fungsi date_default_timezone_set().

Pada pembahasan tanggal dan waktu bagian 1 kita telah membahas tentang pengaturan zona waktu dengan fungsi date_default_timezone_set().

Fungsi tersebut juga bisa bekerja meskipun kita menggunakan DateTime.

Akan tetapi, untuk penggunaan DateTime, kita bisa menggunakan cara lain untuk mengatur zona waktu: yaitu dengan mendefinisikannya pada parameter ke-2 ketika instantiasi kelas DateTime.

Perhatikan contoh berikut:

<?php

$tanggal1 = new DateTime('now', new DateTimeZone('Asia/Jakarta'));
$tanggal2 = new DateTime('now', new DateTimeZone('America/Regina'));

echo "Tanggal 1: " . $tanggal1->format("d-m-Y H:i") . "<br>";
echo "Tanggal 2: " . $tanggal2->format("d-m-Y H:i") . "<br>";

Output:

Tanggal 1: 19-02-2020 20:19
Tanggal 2: 19-02-2020 07:19

Memanipulasi Tanggal dan Waktu

Memanipulasi tanggal dan waktu adalah pekerjaan yang sangat penting dalam proses pembuatan aplikasi atau web. Misal kita punya toko online, lalu kita ingin mengirim peringatan tagihan yang harus dibayar setelah 3 hari dari proses pembelian, maka di sini kita butuh untuk memanipulasi tanggal dan waktu sehingga kita bisa tahu 3 hari setelah tanggal pembelian itu tanggal berapa dan jam berapa?

Dengan menggunakan fungsi-fungsi yang dimiliki kelas DateTime, kita bisa melakukannya dengan mudah.

Perhatikan contoh-contoh berikut ini:

Menambah hari, minggu, bulan, dan tahun

Untuk menambahkan hari, minggu, bulan atau tahun, kita bisa memanfaatkan fungsi modify().

Fungsi tersebut akan merubah instan dari kelas DateTime yang menjadi induk pemanggilan fungsi tersebut.

Karena kita tidak ingin mengubah tanggal induk yang asli, maka kita akan mengkloningnya dengan perintah clone.

Perhatikan kode program berikut ini:

<?php

$hariIni = new DateTime("01-01-2020");
$tigaHariLagi = (clone $hariIni)->modify("+3 days");
$semingguLagi = (clone $hariIni)->modify("+1 week");
$tujuhMingguLagi = (clone $hariIni)->modify("+7 weeks");
$duaBulanLagi = (clone $hariIni)->modify("+2 months");
$limaBelasTahunLagi = (clone $hariIni)->modify("+15 years");

echo $hariIni->format("d-m-Y") . "<br>";
echo $tigaHariLagi->format("d-m-Y") . "<br>";
echo $semingguLagi->format("d-m-Y") . "<br>";
echo $tujuhMingguLagi->format("d-m-Y") . "<br>";
echo $duaBulanLagi->format("d-m-Y") . "<br>";
echo $limaBelasTahunLagi->format("d-m-Y") . "<br>";

Output:

01-01-2020
04-01-2020
08-01-2020
19-02-2020
01-03-2020
01-01-2035

Mengurangi hari, minggu, bulan, dan tahun

Caranya adalah sama dengan sebelumnya. Hanya saja jika ingin mengurangi, kita harus menggunakan tanda -. Perhatikan contoh berikut:

<?php

$hariIni = new DateTime("01-01-2020");
$tigaHariYangLalu = (clone $hariIni)->modify("-3 days");
$semingguYangLalu = (clone $hariIni)->modify("-1 week");

echo $hariIni->format("d-m-Y") . "<br>";
echo $tigaHariYangLalu->format("d-m-Y") . "<br>";
echo $semingguYangLalu->format("d-m-Y") . "<br>";

Output:

01-01-2020
29-12-2019
25-12-2019

Membandingkan Tanggal dan Waktu

Sama dengan yang kita lakukan pada tutorial sebelumnya, dengan menggunakan DateTime kita bisa membandingkannya dengan operator perbandingan. Entah itu kurang dari (<), atau lebih dari (>), sama dengan (=), atau yang lainnya.

Perhatikan contoh berikut:

<?php

$tanggal1 = new DateTime("2020-01-01");
$tanggal2 = new DateTime("2020-01-31");

if ($tanggal1 < $tanggal2) {
    echo $tanggal1->format("d-m-Y") . " < " . $tanggal2->format("d-m-Y");
} elseif ($tanggal1 === $tanggal2) {
    echo $tanggal1->format("d-m-Y") . " = " . $tanggal2->format("d-m-Y");
} else {
    echo $tanggal1->format("d-m-Y") . " > " . $tanggal2->format("d-m-Y");
}

Output:

01-01-2020 < 31-01-2020

Pembahasan Selanjutnya

Pada dua pertemuan ini, kita telah selesai membahas tentang bagaimana cara memanipulasi tanggal dan waktu pada PHP, baik dengan pendekatan prosedural mau pun dengan pendekatan OOP.

Pada pertemuan selanjutnya insyaallah kita masih akan membahas tentang tanggal dan waktu, yaitu tentang bagaimana cara menampilkan nama hari dan nama bulan dalam PHP dengan Bahasa Indonesia.