Penggunaan fungsi MM/YY pada PHP

Catatan: Karena jawaban kiriman ini kadang-kadang dibatalkan, saya kembali ke sini untuk meminta orang-orang untuk tidak memperbaikinya lagi. Jawaban saya kuno, tidak benar secara teknis, dan ada beberapa pendekatan yang lebih baik di sini. Saya hanya menyimpannya di sini untuk tujuan sejarah.

Meskipun dokumentasi dengan buruk menggambarkan fungsi strtotime, @rjmunro dengan benar membahas masalah ini dalam komentarnya: ini dalam format tanggal ISO "YYYY-MM-DD".

Juga, meskipun fungsi Date_Converter saya mungkin masih berfungsi, saya ingin memperingatkan bahwa mungkin ada pernyataan yang tidak tepat di bawah ini, jadi harap abaikan saja.

Jawaban yang paling banyak dipilih sebenarnya salah!

Manual PHP strtotime di sini menyatakan bahwa "Fungsi tersebut diharapkan akan diberi string yang berisi format tanggal bahasa Inggris". Apa yang sebenarnya dimaksud adalah bahwa ia mengharapkan format tanggal Amerika AS, seperti "m-d-Y" atau "m/d/Y".

Itu berarti bahwa tanggal yang disediakan sebagai "Y-m-d" dapat disalahartikan oleh strtotime. Anda harus memberikan tanggal dalam format yang diharapkan.

Saya menulis sedikit fungsi untuk mengembalikan tanggal dalam beberapa format. Gunakan dan modifikasi sesuka hati. Jika ada yang mengubahnya menjadi kelas, saya akan senang jika itu dibagikan.

function Date_Converter($date, $locale = "br") {

    # Exception
    if (is_null($date))
        $date = date("m/d/Y H:i:s");

    # Let's go ahead and get a string date in case we've
    # been given a Unix Time Stamp
    if ($locale == "unix")
        $date = date("m/d/Y H:i:s", $date);

    # Separate Date from Time
    $date = explode(" ", $date);

    if ($locale == "br") {
        # Separate d/m/Y from Date
        $date[0] = explode("/", $date[0]);
        # Rearrange Date into m/d/Y
        $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
    }

    # Return date in all formats
        # US
        $Return["datetime"]["us"] = implode(" ", $date);
        $Return["date"]["us"]     = $date[0];

        # Universal
        $Return["time"]           = $date[1];
        $Return["unix_datetime"]  = strtotime($Return["datetime"]["us"]);
        $Return["unix_date"]      = strtotime($Return["date"]["us"]);
        $Return["getdate"]        = getdate($Return["unix_datetime"]);

        # BR
        $Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
        $Return["date"]["br"]     = date("d/m/Y", $Return["unix_date"]);

    # Return
    return $Return;

} # End Function

Saya dapat melihat jawaban yang bagus, jadi tidak perlu mengulangi di sini, jadi saya ingin menawarkan beberapa saran:

Saya akan merekomendasikan menggunakan integer Unix Timestamp alih-alih format tanggal yang dapat dibaca manusia untuk menangani waktu secara internal, kemudian gunakan fungsi PHP date() untuk mengubah nilai cap waktu menjadi format tanggal yang dapat dibaca manusia untuk tampilan pengguna. Berikut adalah contoh kasar tentang bagaimana hal itu harus dilakukan:

// Get unix timestamp in seconds
$current_time = date();

// Or if you need millisecond precision

// Get unix timestamp in milliseconds
$current_time = microtime(true);

Kemudian gunakan $current_time sesuai kebutuhan di aplikasi Anda (toko, tambah atau kurangi, dll), maka ketika Anda perlu menampilkan nilai tanggal itu kepada pengguna Anda, Anda dapat menggunakan date() untuk menentukan format tanggal yang Anda inginkan:

// Display a human-readable date format
echo date('d-m-Y', $current_time);

Dengan cara ini Anda akan terhindar dari sakit kepala yang berhubungan dengan format tanggal, konversi, dan zona waktu, karena tanggal Anda akan berada dalam format standar (Unix Timestamp) yang kompak, tidak tergantung zona waktu (selalu dalam UTC) dan didukung secara luas dalam bahasa dan basis data pemrograman. .

Indonesian (Bahasa Indonesia) translation by Febri Ardian Sanjoyo (you can also view the original English article)

Anda akan sering ingin bekerja dengan tanggal dan waktu ketika mengembangkan situs web. Misalnya, Anda mungkin perlu menunjukkan tanggal modifikasi terakhir pada posting atau menyebutkan berapa lama waktu yang lalu seorang pembaca menulis beberapa komentar. Anda mungkin juga harus menunjukkan hitungan mundur dari hari ke hari sampai di event khusus.

Untungnya, PHP hadir dengan beberapa fungsi tanggal dan waktu bawaan yang akan membantu kita melakukan semua itu dan lebih mudah lagi.

Tutorial ini akan mengajari Anda cara memformat tanggal dan waktu saat ini dalam PHP. Anda juga akan belajar cara mendapatkan stempel waktu dari string tanggal dan cara menambahkan dan mengurangi tanggal yang berbeda.

Mendapatkan Tanggal dan Waktu dalam Format String

date($ format, $ timestamp) adalah salah satu fungsi tanggal dan waktu yang paling umum digunakan di PHP. Dibutuhkan format output yang diinginkan untuk tanggal sebagai parameter pertama dan integer sebagai nilai timestamp yang perlu dikonversi ke format tanggal yang ditentukan. Parameter kedua adalah opsional, dan mengabaikannya akan memberikan output tanggal dan waktu saat ini dalam format string berdasarkan nilai $format.

Parameter $format menerima serangkaian karakter sebagai nilai yang valid. Beberapa karakter ini memiliki arti langsung: Y memberi Anda representasi numerik penuh tahun dengan 4 digit (2018), dan y hanya memberi Anda dua digit terakhir dari tahun berjalan (18). Demikian pula, H akan memberi Anda jam dalam format 24-jam dengan nol di depan, tetapi h akan memberi Anda jam dalam format 12-jam dengan nol di depan.

Berikut adalah beberapa karakter format tanggal yang paling umum dan nilainya.

KarakterMaknaContoh
d hari dalam bulan dengan nol terkemuka 03 atau 17
j hari dalam bulan tanpa awalan nol 3 atau 17
D hari dalam seminggu sebagai singkatan tiga huruf Mon
l hari penuh dalam seminggu Senin
m bulan sebagai angka dengan angka nol di depan 09 atau 12
n bulan sebagai angka tanpa awalan nol 9 atau 12
M bulan sebagai singkatan tiga huruf Sep
F bulan penuh September
y tahun dua digit 18
Y setahun penuh 2018

Ada banyak karakter khusus lainnya untuk menentukan output untuk fungsi date(). Sebaiknya lihat tabel karakter format dalam dokumentasi fungsi date() untuk informasi lebih lanjut tentang special case.

Mari kita lihat beberapa contoh praktis dari fungsi date() sekarang. Kita dapat menggunakannya untuk mendapatkan tahun sekarang, bulan ini, jam saat ini, dll., Atau kita dapat menggunakannya untuk mendapatkan string tanggal lengkap.

<?php

// Output — 2018
echo date('Y');

// Output — September 2018
echo date('F Y');

// Output — 13 September, 2018
echo date('d F, Y');

// Output — 13 September, 2018 (Thursday)
echo date('d F, Y (l)');

Anda juga dapat menggunakan fungsi date() untuk menampilkan waktu. Berikut adalah beberapa karakter format waktu yang paling sering digunakan:

KarakterMaknaContoh
g jam dalam format 12 jam tanpa awalan nol 1 atau 12
h jam dalam format 12 jam dengan nol di depan 01 atau 12
G jam dalam format 24 jam tanpa awalan nol 1 atau 13
H jam dalam format 24 jam dengan nol di depan 01 atau 13
a am/pm dalam huruf kecil am
A am/pm dalam huruf besar AM
i menit dengan nol di depan 09 atau 15
s detik dengan nol di depan 05 atau 30

Dan berikut adalah beberapa contoh keluaran string time yang terformat.

// Output — 11:03:37 AM
echo date('h:i:s A');

// Output — Thursday, 11:04:09 AM
echo date('l, h:i:s A');

// Output — 13 September 2018, 11:05:00 AM
echo date('d F Y, h:i:s A');

?>

Penting juga bahwa Anda lepas dari karakter khusus ini jika Anda ingin menggunakannya di dalam string date Anda.

<?php

// Output — CEST201813am18 1115 Thursday.
echo date('Today is l.');

// Output — Today is Thursday.
echo date('\T\o\d\a\y \i\s l.');

// Output — Today is Thursday.
echo 'Today is '.date('l.');

?>

Dapatkan stempel waktu Unix

Terkadang, Anda perlu mendapatkan nilai cap waktu Unix saat ini dalam PHP. Ini sangat mudah dengan bantuan fungsi time(). Ini mengembalikan nilai integer yang menggambarkan jumlah millisexonds yang telah berlalu sejak 1 Januari 1970 pada tengah malam (00:00:00) GMT.

Anda juga dapat menggunakan fungsi ini untuk bolak-balik pada waktunya. Untuk melakukannya, yang harus Anda lakukan hanyalah mengurangi jumlah detik yang tepat dari nilai time() saat ini dan kemudian mengubah nilai yang dihasilkan menjadi string tanggal yang diinginkan. Berikut dua contoh:

<?php

$ten_days_later = time() + 10*60*60*24;
// Output — It will be Sunday 10 days later.
echo 'It will be '.date('l', $ten_days_later).' 10 days later.';

$ten_days_ago = time() - 10*60*60*24;
// Output — It was Monday 10 days ago.
echo 'It was '.date('l', $ten_days_ago).' 10 days ago.';

?>

Satu hal penting yang harus Anda ingat adalah bahwa nilai timestamp yang dikembalikan oleh time() adalah zona waktu agnostik dan mendapat jumlah detik sejak 1 Januari 1970 pada 00:00:00 UTC. Ini berarti bahwa pada titik waktu tertentu, fungsi ini akan mengembalikan nilai yang sama di AS, Eropa, India, atau Jepang.

Cara lain untuk mendapatkan timestamp untuk tanggal tertentu adalah menggunakan fungsi mktime($hour, $minute, $second, $month, $day, $year). Ketika semua parameter dihilangkan, fungsi ini hanya menggunakan tanggal dan waktu lokal saat ini untuk menghitung nilai timestamp. Fungsi ini juga dapat digunakan dengan date() untuk menghasilkan string tanggal dan waktu yang berguna.

<?php

$some_time = mktime(1, 1, 1, 12, 3, 1994);
// Output — It was Saturday on 03 December, 1994.
echo 'It was '.date('l', $some_time).' on '.date('d F, Y', $some_time).'.';

?>

Pada dasarnya, time() dapat digunakan untuk bolak-balik ke suatu periode waktu, sementara mktime() berguna ketika Anda ingin pergi ke suatu titik waktu tertentu.

Mengkonversi Datetime String ke Timestamp

Fungsi strtotime ($time, [$now = time()]) akan sangat membantu ketika Anda ingin mengonversi nilai tanggal dan waktu yang berbeda dalam format string ke timestamp. Fungsi ini dapat mem-parse hampir semua jenis string datetime ke timestamp.

Anda pasti harus memeriksa valid time formats, date formats, compound datetime formats, dan relative datetime formats.

Dengan relative datetime format, fungsi ini dapat dengan mudah mengkonversi string yang umum digunakan menjadi nilai timestamp yang valid. Contoh berikut membuatnya jelas:

<?php

$some_time = strtotime("10 months 15 days 10 hours ago");
// Output — It was Sunday on 29 October, 2017 03:16:46.
echo 'It was '.date('l', $some_time).' on '.date('d F, Y h:i:s', $some_time).'.';

$some_time = strtotime("next month");
// Output — It is Saturday on 13 October, 2018 01:18:05.
echo 'It is '.date('l', $some_time).' on '.date('d F, Y h:i:s', $some_time).'.';

$some_time = strtotime("third monday");
// Output — Date on the third monday from now will be 01 October, 2018.
echo 'Date on the third monday from now will be '.date('d F, Y', $some_time).'.';

$some_time = strtotime("last day of November 2021");
// Output — Last day of November 2021 will be Tuesday.
echo 'Last day of November 2021 will be '.date('l', $some_time).'.';

?>

Menambahkan, mengurangi dan membandingkan tanggal

Ini mungkin untuk menambah dan mengurangi jangka waktu tertentu ke dan dari tanggal. Ini dapat dilakukan dengan bantuan fungsi date_add() dan date_sub(). Anda juga dapat menggunakan fungsi date_diff() untuk mengurangi dua tanggal dan menampilkan perbedaan di antara itu dalam beberapa tahun, bulan, dan hari, atau yang lain.

Secara umum, lebih mudah untuk melakukan aritmatika tanggal dan waktu terkait dalam gaya berorientasi objek dengan kelas DateTime daripada melakukannya secara prosedural. Kita akan mencoba kedua style ini di sini, dan Anda dapat memilih mana yang paling Anda sukai.

<?php

$present = date_create('now');
$future = date_create('last day of January 2024');
$interval = date_diff($present, $future);
// Output — 05 years, 04 months and 17 days
echo $interval->format('%Y years, %M months and %d days');

$present = new DateTime('now');
$future = new DateTime('last day of January 2024');
$interval = $present->diff($future);
// Output — 05 years, 04 months and 17 days
echo $interval->format('%Y years, %M months and %d days');

?>

Ketika menggunakan DateTime::diff(), objek DateTime di mana metode diff() dipanggil dikurangkan dari objek DateTime yang diteruskan ke metode diff(). Ketika Anda menulis kode procedural style, parameter tanggal pertama dikurangi dari parameter tanggal kedua.

Baik fungsi dan metode mengembalikan objek DateInterval() yang mewakili perbedaan antara dua tanggal. Interval ini dapat diformat untuk memberikan output spesifik menggunakan semua karakter yang tercantum dalam format() method documentation.

Perbedaan antara gaya berorientasi objek dan prosedural gaya menjadi lebih jelas ketika mengurangi atau menambahkan interval waktu.

Anda dapat memberi contoh objek DateTime baru menggunakan DateTime() Constructor. Demikian pula, Anda dapat instantiate objek DateInterval menggunakan DateInterval() constructor. Ini menerima string sebagai parameternya. String interval dimulai dengan P, yang menandakan periode. Setelah itu, Anda dapat menentukan setiap periode menggunakan nilai integer dan karakter yang ditetapkan untuk periode tertentu. Anda harus memeriksa DateInterval documentation untuk lebih jelasnya.

Berikut ini contoh yang menggambarkan betapa mudahnya menambah atau mengurangi tanggal dan waktu dalam PHP.

<?php

$now = new DateTime('now');
$the_interval = new DateInterval('P20Y5M20D');
$now->add($the_interval);

// Output — It will be Saturday, 05 March, 2039 after 20 years, 05 months and 20 days from today.
echo 'It will be '.$now->format('l, d F, Y').' after '.$the_interval->format("%Y years, %M months and %d days").' from today.';

$now = date_create('now');
$the_interval = date_interval_create_from_date_string('20 years 05 months 20 days');
date_add($now, $the_interval);

// Output — It will be Saturday, 05 March, 2039 after 20 years, 05 months and 20 days from today.
echo 'It will be '.$now->format('l, d F, Y').' after '.$the_interval->format("%Y years, %M months and %d days").' from today.';

?>

Anda juga dapat membandingkan tanggal dalam PHP menggunakan operator perbandingan. Ini dapat berguna setiap sekarang dan kemudian. Mari buat penghitung hari Natal menggunakan operator perbandingan dan metode DateTime lainnya.

<?php

$now = new DateTime('today');
$christmas = new DateTime('25 December 2018');

while($now > $christmas) {
    $christmas->add(new DateInterval('P1Y'));
}

if($now < $christmas) {
    $interval = $now->diff($christmas);
    echo $interval->format('%a days').' until Christmas!';
}

if($now == $christmas) {
    echo 'Merry Christmas :)';
}

// Output — 103 days until Christmas!

?>

Kita mulai dengan membuat dua objek DateTime untuk menyimpan waktu sekarang dan tanggal Natal tahun ini. Setelah itu, kita menjalankan while loop untuk terus menambahkan 1 tahun ke tanggal Natal 2018 hingga tanggal sekarang kurang dari tanggal Natal. Ini akan sangat membantu ketika kode berjalan pada 18 Januari 2024. Loop sementara akan menaikkan tanggal Natal asalkan kurang dari tanggal sekarang pada saat menjalankan skrip ini.

Penghitung hari Natal kita sekarang akan bekerja selama beberapa dekade mendatang tanpa masalah.

Pemikiran Akhir

Dalam tutorial ini, kita belajar cara menampilkan tanggal dan waktu saat ini dalam format yang diinginkan menggunakan fungsi date(). Kita juga melihat bahwa date() juga dapat digunakan untuk hanya mendapatkan tahun sekarang, bulan, dan seterusnya. Setelah itu, kita belajar cara mendapatkan timestamp saat ini atau mengonversi string DateTime yang valid menjadi timestamp. Terakhir, kita belajar bagaimana menambah atau mengurangi jangka waktu dari tanggal yang berbeda.

Saya sudah mencoba untuk menutupi fungsi dan metode key DateTime di sini. Anda pasti harus melihat dokumentasi untuk membaca tentang fungsi yang tidak dibahas dalam tutorial. Jika Anda memiliki pertanyaan, jangan ragu untuk memberi tahu saya di komentar.