Fungsi strtotime di PHP sangat kuat tetapi sangat kurang dimanfaatkan - terutama karena beberapa aspek bisa sedikit membingungkan dan orang lebih percaya diri 'melakukan hal-hal dengan cara yang sulit'. Fungsi strtotime tidak hanya mengonversi string tanggal menjadi nilai stempel waktu tetapi juga memiliki 'bahasa' sendiri untuk memungkinkan Anda menentukan tanggal atau waktu apa pun yang Anda inginkan
Menghitung tanggal untuk hari-hari yang lalu dan yang akan datang
Perhitungan termudah dan paling umum didasarkan pada detik, menit, jam, dan hari. Bulan dan tahun juga merupakan input yang valid tetapi tidak selalu berguna dalam perhitungan karena panjangnya tidak sama karena cara kerja kalender kita
Di bawah ini adalah hasil dari berbagai string yang diteruskan ke strtotime dan diubah menjadi string tanggal
Sebagai contoh
echo date('l jS F (Y-m-d)', strtotime('-3 days'));3 hari yang laluRabu 18 Januari (2023-01-18)-3 hariRabu 18 Januari (2023-01-18)-2 hariKamis 19 Januari (2023-01-19)kemarinJumat 20 Januari (20-01-2020)sekarangSabtu 21 Januari (Seperti biasa sering ada cara berbeda untuk mencapai hasil yang sama. Pada daftar di atas Anda dapat melihat bahwa '3 hari yang lalu' setara dengan '-3 hari'. Juga 'kemarin' sama dengan '-1 hari' atau '1 hari yang lalu'. Tanda 's' di akhir 'hari', 'tahun' atau pengukuran lainnya dapat dihilangkan jika Anda mau
Nilai input 'sekarang' dan 'hari ini' dalam daftar di atas tidak berguna seolah-olah kita mengabaikan paramater kedua dari fungsi tanggal, itu tetap akan default ke waktu saat ini
Bekerja dengan hari dalam seminggu
Terkadang kita bekerja dengan hari dalam seminggu dan perlu mengetahui kejadian terakhir/berikutnya, misalnya hari Sabtu
-2 minggu SabtuSabtu 7 Januari (2023-01-07)Sabtu terakhirSabtu 14 Januari (2023-01-14)SabtuSabtu 21 Januari (21-01-2021)Sabtu iniSabtu 21 Januari (21-01-2023)Sabtu pertamaSabtu 28 Januari (Dalam daftar di atas kita dapat melihat bahwa 'Sabtu', 'Sabtu ini' dan 'Sabtu pertama' semuanya setara. Kata kunci 'ini' dan 'pertama' hanya digunakan untuk meningkatkan keterbacaan
Sekarang agak rumit untuk dijelaskan. Berikut ini muncul di situs web PHP
Dalam PHP 5 hingga 5. 0. 2, "sekarang" dan waktu relatif lainnya salah dihitung dari tengah malam hari ini. Ini berbeda dari versi lain yang dihitung dengan benar dari waktu saat ini
Selain itu, mereka telah memperkenalkan 'kedua' seperti pada 'Sabtu kedua' dan tampaknya telah mengubah arti 'berikutnya' menjadi sama dengan 'pertama'. Terakhir, nilai kembalian pada kegagalan sekarang adalah FALSE, bukan -1. Perubahan terakhir ini yang paling mungkin menyebabkan masalah pada aplikasi lawas
Tabel di bawah menunjukkan bagaimana output telah berubah
PHP versi lama. PHP5. 0. 2 dan lebih tinggi- Sabtu lalu
- Sabtu ini atau Sabtu pertama
- Sabtu depan
- Sabtu ketiga
- Sabtu keempat
- Sabtu lalu
- Sabtu ini atau Sabtu pertama atau Sabtu depan
- Sabtu kedua
- Sabtu ketiga
- Sabtu keempat
Menggunakan offset untuk mendapatkan hari yang tepat
Masalah lainnya adalah ketika Anda ingin menemukan kejadian sebelumnya atau berikutnya dari hari tertentu dalam seminggu. Misalnya, hari ini adalah hari Sabtu kita dapat menjalankan yang berikut ini
Sabtu terakhir Sabtu 14 Januari (2023-01-14) Sabtu Sabtu 21 Januari (21-01-2021) Sabtu ini Sabtu 21 Januari (21-01-2021) Sabtu pertama Sabtu 28 Januari (2023-01-28) Sabtu berikutnya Sabtu 28 Januari (2023- . PHP5. 0. 2 dan lebih tinggi- Sabtu lalu
- Sabtu ini atau Sabtu pertama
- Sabtu depan
- Sabtu ketiga
- Sabtu keempat
- Sabtu lalu
- Sabtu ini
- Sabtu pertama atau Sabtu depan
- Sabtu kedua
- Sabtu ketiga
Anda dapat melihat pada tabel di atas bahwa, sementara 'Sabtu depan' mengembalikan hasil yang sama, 'pertama', 'kedua', 'ketiga',. pengubah semuanya telah berubah artinya - untungnya ke keadaan yang lebih logis
Anda juga mungkin memperhatikan bahwa ini hanya terjadi ketika Anda menghitung dari hari ini dan bukan pada contoh sebelumnya (kecuali hari ini adalah hari Sabtu). Setiap kali Anda melakukan perhitungan berdasarkan hari, Anda harus menguji kemungkinan sebanyak mungkin. Apakah ini berhasil hari ini?
Terkadang Anda ingin mencari kejadian terakhir sehari sebelum hari ini, atau sebelum kemarin atau sebelum 2 hari yang lalu. Contoh berikut menunjukkan sintaks yang dapat Anda gunakan untuk ini
Sekarang setelah Anda memahami cara kerja strtotime, Anda harus dapat secara drastis mengurangi jumlah kode yang diperlukan untuk menghitung tanggal yang lalu dan yang akan datang
Memeriksa apakah suatu tanggal di Masa Lalu atau Masa Depan
Fungsi strtotime mengembalikan nilai integer sehingga mudah untuk melihat apakah sebuah tanggal di masa lalu atau masa depan
if(strtotime(dateString) > time()) { # date is in the future } if(strtotime(dateString) < time()) { # date is in the past } if(strtotime(dateString) == time()) { # date is right now }_Catatan. time() setara dengan date('U') dan mengembalikan stempel waktu saat ini ke detik terdekat
Anda mungkin ingin mengganti time() dengan strtotime('0. 00') jika Anda ingin membandingkan string tanggal dengan tanggal saat ini daripada tanggal dan waktu saat ini