Apa Itu Tanggal dan Waktu (DateTime) PHP?
DateTime merupakan salah satu class dalam PHP berbasis OOP (Object Oriented Programming) yang digunakan untuk melakukan beberapa proses yang berkaitan dengan tanggal dan waktu. Sebelum DateTime ada, pengguna menggunakan fungsi date()
yang berbasis procedural.
Sintaks
date()
<?php date($format, $timestamp); ?>
$format
merepresentasikan tata cara penulisan tanggal dan waktu. Format yang dibentuk haruslah sesuai dengan format tanggal dan waktu PHP. Untuk pembahasan format, kita dapat melihatnya pada halaman ini di bagian selanjutnya.$timestamp
menerima nilai integer berupa waktu dan tanggal sekarang yang dikonversi menjadi detik (UNIX timestamp). Parameter ini bersifat opsional dan secara default bernilai waktu dan tanggal sekarang yang dikonversi menjadi detik. Penjelasan mengenai UNIX timestamp dapat kita lihat pada halaman ini di bagian selanjutnya.
Mari kita perhatikan contoh penerapannya.
<?php
echo date('d-m-Y H:i:s');
# Output (dapat berbeda): 16-09-2020 14:28:13
echo date('d-m-Y H.i.s', 2199999423);
# Output: 18-09-2039 11.57.03
?>
Penggunaan date()
dalam PHP mulai tergantikan dengan DateTime yang berbasis OOP. DateTime dapat digunakan sejak PHP versi 5.2.
Sintaks DateTime
<?php new DateTime($time, $timezone); ?>
$time
menerima nilai berupa tanggal dan/atau waktu menurut zona waktu yang telah ditetapkan. Parameter ini bersifat opsional dan secara default bernilai'now'
.$timezone
merupakan parameter yang bertujuan untuk menetapkan zona waktu mana yang digunakan$time
. Parameter ini bersifat opsional dan memiliki nilai default berupanull
, yang berarti zona waktu yang digunakan adalah “UTC” (GMT).
Mari kita perhatikan contoh penggunaan DateTime.
<?php
$utcDateTime = new DateTime();
$asiaDateTime = new DateTime('now', new DateTimeZone('Asia/Jakarta'));
$Apr30Utc = new DateTime('2020-04-30 07.00.00');
$Apr30Asia = new DateTime('2020-04-30 07.00.00', new DateTimeZone('Asia/Jakarta'));
$Sept2 = new DateTime('2 Sept 2019');
$Sept3 = new DateTime('2019, 3 Sept');
var_dump($utcDateTime);
var_dump($asiaDateTime);
var_dump($Apr30Utc);
var_dump($Apr30Asia);
var_dump($Sept2);
var_dump($Sept3);
?>
Output dari kode di atas dapat berbeda. Berikut contoh hasil kode di atas.
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 14:28:13.827293"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2020-09-16 21:43:56.495370"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#3 (3) {
["date"]=>
string(26) "2020-04-30 07:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#4 (3) {
["date"]=>
string(26) "2020-04-30 07:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#5 (3) {
["date"]=>
string(26) "2019-09-02 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#6 (3) {
["date"]=>
string(26) "2020-09-03 20:19:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
Beberapa method DateTime yang sering digunakan
setTimeZone()
setTimeZone()
adalah method dari DateTime yang digunakan untuk menetapkan zona waktu yang diinginkan, mulai ada sejak PHP 5.2.0. Sebenarnya, kita telah menetapkan zona waktu pada saat mengisi nilai parameter kedua ($timezone
) pada contoh kode sebelumnya. Namun, pada contoh tersebut kita langsung mengisi nilai $timezone
tanpa memakai method setTimeZone()
terlebih dahulu. Secara default, $timezone
dalam PHP adalah “UTC”, namun kita dapat memodifikasinya melalui file php.ini
.
Sintaks
setTimeZone()
<?php $namaVariabel = new DateTime(); $namaVariabel->setTimeZone(new DateTimeZone($timezone)); ?>
$namaVariabel
merupakan object dari DateTime yang akan ditentukan zona waktunya.$timezone
merupakan parameter yang bertujuan untuk menentukan zona waktu.
Berikut contoh penerapan setTimeZone()
.
<?php
$newDate = new DateTime();
var_dump($newDate);
$newDate->setTimeZone(new DateTimeZone('Asia/Bangkok'));
var_dump($newDate);
?>
Output dari kode di atas dapat berbeda, begitu juga untuk zona waktu default. Berikut contoh hasil kode di atas.
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 22:13:44.955971"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 22:13:44.955971"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Bangkok"
}
Terdapat 1 cara lagi untuk menetapkan zona waktu dalam PHP, yaitu date_default_timezone_set()
. Method ini hanya menerima satu parameter, yaitu zona waktu, date_default_timezone_set($timezone)
. Namun, method ini bertujuan untuk menetapkan zona waktu default pada kode-kode setelah method ini. Berikut merupakan contoh penerapannya.
<?php
$newDate = new DateTime();
var_dump($newDate);
// Timezone "UTC"
date_default_timezone_set("Asia/Jakarta");
// Default timezone menjadi "Asia/Jakarta"
var_dump($newDate);
// Timezone $newDate tidak terpengaruh karena telah diinisialisasi sebelum pengaturan default timezone "Asia/Jakarta"
$secondDate = new DateTime();
var_dump($secondDate);
// Mendapat pengaruh dari default timezone "Asia/Jakarta"
?>
Output dapat berbeda, tergantung pada pengaturan zona waktu default dan waktu pengujian kode. Berikut contoh hasil kode.
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 22:13:44.955971"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 22:13:44.955971"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2020-09-16 22:13:44.955971"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
DateInterval – sub() & add()
DateInterval digunakan untuk mendapatkan jarak/interval waktu pada DateTime. DateInterval mulai ada di PHP sejak versi 5.3.0. Biasanya, method yang digunakan bersama DateInterval adalah sub()
dan add()
. Seperti namanya, sub()
digunakan untuk pengurangan dan add()
untuk penjumlahan pada DateTime.
Sintaks DateInterval dengan
sub()
danadd()
<?php $namaVariabel->sub(new DateInterval($duration)); $namaVariabel->add(new DateInterval($duration)); ?>
$duration
adalah parameter yang mengacu pada interval/durasi waktu dan/atau tanggal yang akan ditambahi/dikurangi. Parameter diawali dengan karakterP
yang berarti Period. Terdapat beberapa daftar dari penunjuk periode yang harus kita ketahui untuk mengisi nilai dari$duration
, antara lain: | Penunjuk Periode | Deskripsi | | :-: | :– | |Y
| years (tahun) | |M
| months (bulan) | |D
| days (hari) | |W
| weeks (minggu) | |H
| hours (jam) | |M
| minutes (menit) | |S
| seconds (detik) |
- Nilai
W
pada$duration
akan dikonversi menjadi hari, sehingga kita tidak boleh menggunakannya bersamaan denganD
.- Jenis penunjuk periode harus dituliskan dari kiri dengan satuan skala terbesar hingga satuan skala terkecil di kanan. Jadi, tahun sebelum bulan, bulan sebelum hari, hari sebelum menit, dst.
- Jika kita menerapkan penunjuk periode waktu (
H
,M
, danS
), kita perlu mengawalinya dengan pemisah berupa karakterT
yang berarti Time, misalnyaPT4M
danP3DT3H2S
.
Mari kita perhatikan contoh penerapan DateInterval pada kode berikut.
<?php
$Aug14 = new DateTime('2020-08-14 12.00.00', new DateTimeZone("Asia/Jakarta"));
// Penambahan sebanyak 7 tahun 5 bulan 4 hari pada $Aug14
var_dump($Aug14->add(new DateInterval('P7Y5M4D')));
$now18 = new DateTime('18.20.15', new DateTimeZone("Asia/Jakarta"));
// Penambahan sebanyak 7 jam 14 menit 13 detik pada $now18
var_dump($now18->add(new DateInterval('PT7H14M13S')));
$Apr25 = new DateTime('2020-04-25 08.50.12', new DateTimeZone("Asia/Jakarta"));
// Pengurangan sebanyak 1 bulan 1 minggu 2 jam 30 menit 15 detik pada $Apr25
var_dump($Apr25->sub(new DateInterval('P1M1WT2H30M15S')));
?>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2028-01-18 12:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2020-09-18 01:34:28.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#3 (3) {
["date"]=>
string(26) "2020-03-18 06:19:57.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
Format DateTime
Tata cara menuliskan tanggal dan waktu tentunya sangat penting. Lantas bagaimana format DateTime pada PHP? Sebelum itu, kita perlu memahami method format()
terlebih dahulu. Method ini bertujuan untuk memberi format tanggal dan waktu dari variabel DateTime yang telah ada. Method format()
menerima parameter berupa format tanggal dan waktu yang ingin diterapkan pada DateTime. Format yang diisi harus sesuai dengan format yang ada. Selain method format()
, kita juga dapat menerapkan fungsi date_format()
yang memiliki tujuan yang sama dan bersifat procedural.
Sintaks
format()
<?php $namaVariabel = new DateTime(); $namaVariabel->format('DateTime_format_written_in_string'); date_format($namaVariabel, 'DateTime_format_written_in_string') ?>
Parameter
format()
menerima format DateTime yang telah ditentukan dan dituliskan dalam bentuk string, misalnya'd-m-Y H:i:s'
.
Pertama-tama, mari kita perhatikan tabel format penanggalan (Date) berikut.
Jenis | Karakter | Keterangan | Hasil |
---|---|---|---|
Hari & Tanggal | |||
d |
Representasi tanggal dalam 1 bulan yang terdiri atas 2 digit yang diawali dengan 01. | 01 hingga 31 | |
j |
Representasi tanggal dalam 1 bulan dengan digit seadanya yang diawali dengan 1. | 1 hingga 31 | |
D |
Representasi hari dalam bentuk tulisan yang terdiri atas 3 huruf. | Mon hingga Sun | |
l |
Representasi hari dalam bentuk tulisan bahasa Inggris yang lengkap. | Monday hingga Sunday | |
N |
Representasi nama hari dalam bentuk angka (ada sejak PHP 5.1.0). | 1 (Monday) hingga 7 (Sunday) | |
w |
Representasi nama hari dalam bentuk angka, dengan indeks 0 untuk Minggu. | 0 (Sunday), 1 (Monday) hingga 6 (Saturday) | |
S |
Representasi akhiran ordinal bahasa Inggris untuk tanggal dalam sebulan, cocok bila diterapkan bersama dengan j . |
st, nd, rd, atau th | |
z |
Representasi hari dalam setahun dalam bentuk angka. | 1 hingga 365 | |
Minggu | |||
W |
Representasi minggu keberapa dari setahun dengan angka. | contoh: 3 (Minggu ke-3 dalam setahun) | |
Bulan | |||
F |
Representasi nama bulan secara lengkap dalam bahasa Inggris. | January hingga December | |
m |
Representasi bulan dalam bentuk 2 digit angka yang diawali dengan 01. | 01 hingga 12 | |
n |
Representasi bulan dengan digit seadanya yang diawali dengan 1. | 1 hingga 12 | |
M |
Representasi nama bulan dalam bentuk kata dengan 3 huruf. | Jan hingga Dec | |
t |
Representasi jumlah hari pada suatu bulan. | 28 hingga 31 | |
Tahun | |||
L |
Menentukan apakah tahun tersebut merupakan tahun kabisat atau bukan. | 0 (bukan kabisat) dan 1 (kabisat) | |
Y |
Menampilkan tahun dalam bentuk 4 digit angka. | contoh: 1970, 2020 | |
y |
Menampilkan tahun dalam bentuk 2 digit angka. | contoh: 70, 20 |
Untuk format lain, dapat kita rujuk pada DateInterval::__construct – php.net.
Mari kita perhatikan contoh penerapan format penanggalan.
<?php
$date = new DateTime('2020-04-03 08.50.12', new DateTimeZone("Asia/Jakarta"));
echo $date->format('d-m-Y'); # Output: 03-04-2020
echo $date->format('j-n-y'); # Output: 3-4-20
echo $date->format('l, d F Y'); # Output: Friday, 03 April 2020
echo $date->format('D, j M Y'); # Output: Fri, 3 Apr 2020
echo $date->format('M y, jS'); # Output: Apr 20, 3rd
// Representasi nama hari dengan angka
echo $date->format('N'); # Output: 5
echo $date->format('w'); # Output: 5
// Representasi hari ke-n dan minggu ke-n
echo $date->format('z'); # Output: 93
echo $date->format('W'); # Output: 14
// Representasi jumlah hari bulan tersebut dan identifikasi tahun kabisat
echo $date->format('t'); # Output: 30
echo $date->format('L'); # Output: 1
// Bentuk procedural
echo date_format($date, 'd-m-Y'); # Output: 03-04-2020
echo date_format($date, 'j-n-y'); # Output: 3-4-20
echo date_format($date, 'l, d F Y'); # Output: Friday, 03 April 2020
echo date_format($date, 'D, j M Y'); # Output: Fri, 3 Apr 2020
echo date_format($date, 'M y, jS'); # Output: Apr 20, 3rd
?>
Selain format untuk penanggalan, PHP juga memiliki format untuk waktu. Perhatikan tabel format waktu (Time) berikut.
Karakter | Keterangan | Hasil |
---|---|---|
a |
Representasi Ante meridiem dan Post meridiem dalam huruf kecil. | am atau pm |
A |
Representasi Ante meridiem dan Post meridiem dalam huruf besar. | AM atau PM |
g |
Representasi jam dalam format 12 jam dengan digit angka seadanya. | 1 hingga 12 |
G |
Representasi jam dalam format 24 jam dengan digit angka seadanya. | 0 hingga 23 |
h |
Representasi jam dengan format 12 jam dalam bentuk 2 digit angka. | 01 hingga 12 |
H |
Representasi jam dengan format 24 jam dalam bentuk 2 digit angka. | 00 hingga 23 |
i |
Representasi menit dalam bentuk 2 digit angka. | 00 hingga 59 |
s |
Representasi detik dalam bentuk 2 digit angka. | 00 hingga 59 |
u |
Representasi mikrodetik (ada sejak PHP 5.2.2). | contoh: 194221 |
v |
Representasi milidetik (ada sejak PHP 7.0.0). | contoh: 729 |
Untuk format lain, dapat kita rujuk pada DateInterval::__construct – php.net.
Mari kita perhatikan contoh penerapan format waktu.
<?php
$date = new DateTime('2020-04-03 08.50.12.423621', new DateTimeZone("Asia/Jakarta"));
echo $date->format('h:i:s A'); # Output: 08:50:12 AM
echo $date->format('g:i:s a'); # Output: 8:50:12 am
echo $date->format('H.i.s'); # Output: 08.50.12
echo $date->format('G.i.s'); # Output: 8.50.12
// Representasi milidetik dan mikrodetik
echo $date->format('u'); # Output: 423621
echo $date->format('v'); # Output: 423
// Bentuk procedural
echo date_format($date, 'h:i:s A'); # Output: 08:50:12 AM
echo date_format($date, 'g:i:s a'); # Output: 8:50:12 am
echo date_format($date, 'H.i.s'); # Output: 08.50.12
echo date_format($date, 'G.i.s'); # Output: 8.50.12
?>
Kita juga dapat menggunakan format()
pada DateInterval. Mari kita lihat contoh kode berikut.
<?php
$Aug14 = new DateTime('2020-08-14 12.00.00', new DateTimeZone("Asia/Jakarta"));
$Apr25 = new DateTime('2020-04-25 08.50.12', new DateTimeZone("Asia/Jakarta"));
// Penambahan sebanyak 6 hari pada $Aug14
var_dump($Aug14->add(new DateInterval('P6D'))->format('l, d F Y ~ h:i:s A'));
# Output: string(38) "Thursday, 20 August 2020 ~ 12:00:00 PM"
// Pengurangan sebanyak 1 bulan 1 minggu 2 jam 30 menit 15 detik pada $Apr25
var_dump($Apr25->sub(new DateInterval('P1M1WT2H30M15S'))->format('M y, jS H.i.s'));
# Output: string(21) "Mar 20, 18th 06.19.57"
?>
Timestamp
Unix Timestamp merupakan sebuah format bernilai detik dari suatu waktu, yang terhitung sejak 1 Januari 1970 00:00:00 GMT (Unix Epoch time). Penggunaan Timestamp sekilas sangat rumit dibaca karena hanya menampilkan detik saja. Namun, Timestamp sangat baik digunakan karena waktu yang kita dapatkan akan menjadi sangat rinci.
Kita dapat mendapatkan nilai Timestamp saat ini menggunakan fungsi time()
. Mati kita perhatikan contoh penerapannya.
<?php
$current_timestamp = time();
echo $current_timestamp;
# Output: 1600275620
?>
Setiap kali kita melakukan refresh page, output dari time()
akan berubah.
Kita juga dapat mendapatkan Timestamp dari waktu tertentu dengan memanfaatkan fungsi mktime()
. Fungsi ini memiliki 6 parameter dengan sintaks penulisan berupa mktime($hour, $minute, $second, $month, $day, $year)
. Mari kita perhatikan contoh penerapannya yang dikolaborasikan dengan date()
.
<?php
// Membentuk Timestamp dari 21:15:40 16-09-2020
$time = mktime(21, 15, 40, 9, 16, 2020);
var_dump($time);
# Output: int(1600290940)
var_dump(date("l, d F Y H:i:s", $time));
# Output: string(38) "Wednesday, 16 September 2020 21:15:40"
?>
Selain fungsi-fungsi di atas, kita juga dapat mendapatkan Timestamp dengan memanfaatkan method getTimestamp()
dari DateTime secara OOP. Mari kita lihat contoh penerapan method ini.
<?php
$nowTimestamped = new DateTime();
$Sep16Jakarta = new DateTime('2020-09-16 21.15.40', new DateTimeZone("Asia/Jakarta"));
var_dump($nowTimestamped->getTimestamp());
# Output: int(1600508131)
var_dump($Sep16Jakarta->getTimestamp());
# Output: int(1600265740)
?>
Untuk mengonversi Timestamp menjadi tanggal dan waktu yang mudah dibaca, kita dapat menggunakan fungsi gmdate()
dan method setTimestamp()
pada DateTime. Fungsi gmdate()
memerlukan parameter berupa format tanggal/waktu dan nilai integer dari Timestamp. Sedangkan, method setTimestamp()
hanya memerlukan nilai Timestamp. Mari simak contoh kode berikut.
<?php
$Sep16 = (new DateTime('2020-09-16 21.15.40'))->getTimestamp();
var_dump($Sep16);
var_dump(gmdate('l, d F Y H:i:s', $Sep16));
$timestampOfSep16 = (new DateTime())->setTimestamp($Sep16);
var_dump($timestampOfSep16);
var_dump($timestampOfSep16->format('l, d F Y H:i:s'));
?>
int(1600290940)
string(38) "Wednesday, 16 September 2020 21:15:40"
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-09-16 21:15:40.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
string(38) "Wednesday, 16 September 2020 21:15:40"
DateTime juga dapat menerima nilai berupa Timestamp, hanya saja penulisannya memerlukan karakter
@
sebelum nilai Timestamp disematkan. Berikut contoh penulisannya.<?php // Dengan nilai Timestamp secara langsung $Sep16 = new DateTime("@1600290940"); // Dengan nilai Timestamp tersimpan dalam variabel nowTimestamped $nowTimestamped = time(); $now = new DateTime("@{$nowTimestamped}"); ?>
setDate()
setDate()
merupakan sebuah method dari DateTime yang berfungsi untuk menetapkan tanggal yang diinginkan. Method ini memberikan hasil kembalian berupa object DateTime dan menerima 3 parameter integer dengan sintaks setDate($year, $month, $day)
. Mari kita perhatikan contoh penerapannya.
<?php
date_default_timezone_set("Asia/Jakarta");
$independenceDay = new DateTime();
$whatsoeverDay = new DateTime();
$independenceDay->setDate(1945, 8, 17);
$whatsoeverDay->setDate(2023, 15, 32);
var_dump($independenceDay);
var_dump($whatsoeverDay);
var_dump($independenceDay->format('Y-m-d'));
var_dump($whatsoeverDay->format('Y-m-d'));
?>
object(DateTime)#1 (3) {
["date"]=>
string(26) "1945-08-17 17:21:05.262133"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2024-04-01 17:21:05.262139"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
string(10) "1945-08-17"
string(10) "2024-04-01"
Apabila nilai hari yang dimasukkan melewati batas hari pada bulan tersebut, secara otomatis nilai bulan akan bertambah dan nilai tanggal disesuaikan. Hal ini juga berlaku pada bulan.
Sebelum method setDate()
ada, dulunya kita memanfaatkan fungsi date_date_set()
yang bersifat procedural. Fungsi ini menerima 4 parameter wajib, yaitu parameter pertama berupa nama variabel (object dari DateTime) yang menampung hasil fungsi dan sisa parameter sama seperti method setDate()
. Mari kita perhatikan contoh penerapannya.
<?php
date_default_timezone_set("Asia/Jakarta");
$independenceDay = new DateTime();
$whatsoeverDay = new DateTime();
date_date_set($independenceDay, 1945, 8, 17);
date_date_set($whatsoeverDay, 2023, 15, 32);
var_dump($independenceDay);
var_dump($whatsoeverDay);
?>
object(DateTime)#1 (3) {
["date"]=>
string(26) "1945-08-17 17:21:05.262133"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2024-04-01 17:21:05.262139"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
diff()
diff()
bertujuan untuk mencari jarak antara hari, bulan, atau tahun dari dua waktu, merupakan method dari DateTime. Method ini mengembalikan hasil berupa object dengan anggota berupa interval-interval waktu, dapat juga mengembalikan false
jika proses gagal.
Sintaks
diff()
<?php $origin->diff($target, $absolute); ?>
$origin
merupakan object dari DateTime sebagai waktu yang dibandingkan.$target
merupakan object dari DateTime sebagai waktu pembanding.$absolute
merupakan parameter boolean yang memperbolehkan nilai interval yang dikembalikan bersifat mutlak atau tidak. Parameter ini bersifat opsional dan memiliki nilai default berupafalse
.Fungsi ini memiliki bentuk procedural, yaitu
date_diff($origin, $target, $absolute)
.
Mari kita perhatikan contoh penerapannya pada kode berikut.
<?php
$Sept20 = new DateTime('2020-11-20');
$Oct13 = new DateTime('2020-10-13');
var_dump($Sept20->diff($Oct13));
// var_dump(date_diff($Sept20, $Oct13));
var_dump($Oct13->diff($Sept20));
// var_dump(date_diff($Oct13, $Sept20));
var_dump($Oct13->diff($Sept20, true));
// var_dump(date_diff($Oct13, $Sept20, true));
?>
object(DateInterval)#3 (16) { ["y"]=> int(0) ["m"]=> int(1) ["d"]=> int(7) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(1) ["days"]=> int(38) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
object(DateInterval)#3 (16) { ["y"]=> int(0) ["m"]=> int(1) ["d"]=> int(7) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> int(38) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
object(DateInterval)#3 (16) { ["y"]=> int(0) ["m"]=> int(1) ["d"]=> int(7) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> int(38) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
Pada kode di atas, terdapat perbedaan pada properti ["invert"]
. Jika properti ini bernilai int(1)
, nilai dari intervalnya adalah negatif. Jika bernilai int(0)
, nilai interval kedua tanggal adalah positif.
Kita dapat mendapatkan nilai properti tertentu dengan memanfaatkan operator ->
. Kita juga dapat mendapatkan nilai interval dengan memanfaatkan fungsi format()
yang diisi dengan '%R%a'
. Mari kita perhatikan contoh penerapannya.
<?php
$origin = new DateTime('2020-11-20');
$target = new DateTime('2020-10-13');
var_dump($origin->diff($target)->days);
# Output: int(38)
var_dump($target->diff($origin)->d);
# Output: int(7)
var_dump($target->diff($origin, true)->m);
# Output: int(1)
var_dump($origin->diff($target)->format('%R%a'));
# Output: string(3) "-38
var_dump($target->diff($origin)->format('%R%a days'));
# Output: string(8) "+38 days"
var_dump($target->diff($origin, true)->format('%R%a hari'));
# Output: string(8) "+38 hari"
?>
strtotime()
strtotime()
merupakan fungsi yang bertujuan untuk mengubah deskripsi tanggal dan waktu dalam bahasa Inggris menjadi Unix timestamp. Fungsi ini mengembalikan nilai berupa integer dari timestamp, juga dapat mengembalikan nilai false
jika terjadi kegagalan.
Sintaks
strtotime()
<?php strtotime($datetime, $now); ?>
$datetime
memuat string dengan format tanggal dan waktu yang dapat dikonversi fungsi ini. Dalam menulis parameter ini, terdapat beberapa hal yang perlu diperhatikan, antara lain:
- Jika tahun yang dimuat dalam
$datetime
berdigit dua, nilai 0-69 diartikan sebagai 2000-2069, sedangkan nilai 70-100 diartikan sebagai 1970-2000.- Dalam membentuk format tanggal
$datetime
, pemisah/
diasumsikan sebagai penanggalan Amerika (m/d/y), sedangkan pemisah-
diasumsikan sebagai penanggalan Eropa (d-m-y).$now
merupakan parameter opsional yang memuat nilai timestamp dan berfungsi menentukan dasar perhitungan terhadap tanggal terkait. Parameter ini secara default bernilaitime()
.
Fungsi strtotime()
dapat kita padukan dengan date()
untuk membentuk format tanggal dan waktunya. Mari kita perhatikan contoh kode berikut.
<?php
$today = 'now';
$firstDayLastMonth = 'First day of last month';
$calculateTime = '-2 days +5 hours';
$nextSat = 'next Saturday';
$lastTue = 'last Tuesday';
$lastDayFeb2004 = 'Last day of February 2004';
$Apr25 = '25 April 2020';
// Procedural
echo strtotime($today);
# Output: 1601474908
echo date('d-m-Y H.i.s', strtotime($today));
# Output: 30-09-2020 14.08.28
echo date('d-m-Y H.i.s', strtotime($firstDayLastMonth));
# Output: 01-08-2020 14.08.28
echo date('d-m-Y H.i.s', strtotime($calculateTime));
# Output: 28-09-2020 19.08.28
echo date('d-m-Y H.i.s', strtotime($nextSat));
# Output: 03-10-2020 00.00.00
echo date('d-m-Y H.i.s', strtotime($lastTue));
# Output: 29-09-2020 00.00.00
echo date('d-m-Y H.i.s', strtotime($lastDayFeb2004));
# Output: 29-02-2004 00.00.00
echo date('d-m-Y H.i.s', strtotime($Apr25));
# Output: 25-04-2020 00.00.00
// Object Oriented
echo (new DateTime($today))->format('d-m-Y H.i.s');
# Output: 30-09-2020 14.08.28
echo (new DateTime($firstDayLastMonth))->format('d-m-Y H.i.s');
# Output: 01-08-2020 14.08.28
echo (new DateTime($calculateTime))->format('d-m-Y H.i.s');
# Output: 28-09-2020 19.08.28
echo (new DateTime($nextSat))->format('d-m-Y H.i.s');
# Output: 03-10-2020 00.00.00
echo (new DateTime($lastTue))->format('d-m-Y H.i.s');
# Output: 29-09-2020 00.00.00
echo (new DateTime($lastDayFeb2004))->format('d-m-Y H.i.s');
# Output: 29-02-2004 00.00.00
echo (new DateTime($Apr25))->format('d-m-Y H.i.s');
# Output: 25-04-2020 00.00.00
// Hasil output dapat berbeda
?>
createFromFormat()
createFromFormat()
merupakan salah satu static method dari DateTime dan mulai berlaku sejak PHP 5.3.0+. Method ini mengembalikan DateTime object berdasarkan format tanggal dan waktu yang ditentukan, juga dapat mengembalikan nilai false
jika terjadi kegagalan. Fungsi ini juga memiliki bentuk procedural berupa date_create_from_format()
Sintaks
createFromFormat()
aliasdate_create_from_format()
<?php DateTime::createFromFormat($format, $datetime, $timezone); date_create_from_format($format, $datetime, $timezone); ?>
$format
digunakan untuk menentukan format tanggal dan waktu yang akan diterima pada parameter$datetime
. Format disematkan dalam bentuk string dan harus sesuai dengan format DateTime yang ada. Untuk menambahkan karakter tertentu, kita dapat memanfaatkan tandasebagai karakter escape.
$datetime
memuat nilai string yang mewakili tanggal dan waktu. Parameter$datetime
dituliskan dengan format yang sesuai dengan parameter$format
.$timezone
merupakan parameter opsional dan berfungsi untuk menentukan zona waktu, penulisan memanfaatkan DateTimeZone. Jika parameter ini diabaikan, zona waktu default akan digunakan. Parameter ini akan diabaikan jika$datetime
mengandung Unix timestamp maupun menunjukkan sebuah zona waktu.
Mari kita perhatikan contoh penerapannya pada kode berikut.
<?php
$newDate = DateTime::createFromFormat('j F Y', '15 May 2009', new DateTimeZone('Asia/Jakarta'));
var_dump($newDate);
$newDate = date_create_from_format('d-m-Y h:i:s A', '15-02-2020 08:50:12 AM');
var_dump($newDate);
$newDate = DateTime::createFromFormat('Hh im ss', '23h 15m 03s');
var_dump($newDate);
?>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2009-05-15 16:28:33.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Asia/Jakarta"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2020-02-15 08:50:12.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2020-09-19 23:15:03.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
Pengayaan
Kita dapat melakukan perbandingan terhadap dua object dari DateTime dengan menerapkan operator pembanding. Mari kita perhatikan contoh kode berikut.
<?php
$now = new DateTime('now');
$tomorrow = new DateTime('tomorrow');
$yesterday = new DateTime('yesterday');
var_dump($now == $tomorrow);
# Output: bool(false)
var_dump($yesterday < $tomorrow);
# Output: bool(true)
var_dump($yesterday > $now);
# Output: bool(false)
?>
Kita dapat menggunakan beberapa predefined constant untuk menentukan format tanggal dan waktu dalam mempermudah penulisan sesuai standar yang telah ditentukan bersama. Berikut beberapa predefined constant tersebut.
Predefined Constant | Date Format |
---|---|
DATE_ATOM |
Atom (2016-07-22T14:50:01+00:00) |
DATE_COOKIE |
HTTP Cookies (Friday, 22-Jul-16 14:50:01 UTC) |
DATE_RSS |
RSS (Fri, 22 Jul 2016 14:50:01 +0000) |
DATE_W3C |
World Wide Web Consortium (2016-07-22T14:50:01+00:00) |
DATE_ISO8601 |
ISO-8601 (2016-07-22T14:50:01+0000) |
DATE_RFC822 |
RFC 822 (Fri, 22 Jul 16 14:50:01 +0000) |
DATE_RFC850 |
RFC 850 (Friday, 22-Jul-16 14:50:01 UTC) |
DATE_RFC1036 |
RFC 1036 (Fri, 22 Jul 16 14:50:01 +0000) |
DATE_RFC1123 |
RFC 1123 (Fri, 22 Jul 2016 14:50:01 +0000) |
DATE_RFC2822 |
RFC 2822 (Fri, 22 Jul 2016 14:50:01 +0000) |
DATE_RFC3339 |
Sama seperti DATE_ATOM (2016-07-22T14:50:01+00:00) |
Perhatikan contoh penerapannya pada kode berikut.
<?php
echo date(DATE_ATOM, mktime(0, 0, 0, 8, 15, 1947));
# Output: 1947-08-15T00:00:00+05:30
?>