Bagaimana saya bisa memeriksa apakah tanggal / waktu saat ini telah melewati tanggal / waktu yang ditentukan?

115

Saya mencoba menulis skrip yang akan memeriksa apakah tanggal / waktu saat ini sudah lewat 05/15/2010 at 4PM

Bagaimana saya bisa menggunakan fungsi date () PHP untuk melakukan pemeriksaan ini?

dave
sumber

Jawaban:

228

Karena PHP> = 5.2.2 Anda dapat menggunakan DateTimekelas seperti ini:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

String yang diteruskan ke konstruktor DateTime diurai sesuai dengan aturan ini .


Perhatikan bahwa itu juga memungkinkan untuk digunakan timedan strtotimeberfungsi. Lihat jawaban asli .

Salman A
sumber
6
timestamp memiliki beberapa batasan sobat, dan beberapa bug juga, misalnya timestamp tidak dapat menangani tanggal sebelum tahun 1970 dan setelah 2038 (lihat jawaban Ivar Koster)
Steel Brain
1
Kami sering melihat penyalahgunaan DateTime baru () tanpa parameter, jika Anda menggunakan tanggal UTC (sebagaimana mestinya), lebih suka menggunakan DateTime baru ("sekarang", DateTimeZone baru ('UTC')). Ini akan mencegah aplikasi Anda dari bug yang tidak dapat dipahami pada tanggal. saya menyarankan Anda untuk menyimpannya dalam variabel statis fungsi, kelas statis atau di tempat lain dalam proses yang Anda jalankan ...
Loenix
Bagaimana jika kita sudah memiliki objek DateTime dan ingin tahu apakah ini sudah lewat karena kita tidak dapat meneruskan objek ke konstruktor DateTime seperti yang Anda sarankan? haruskah kita menggunakan getTimestamp () dan membandingkannya dengan time ()? @Salman A
pengguna4271704
@ user4271704 Ini new DateTime('2010-05-15')hanyalah sebuah contoh, dapat berupa objek DateTime apa pun yang Anda inisialisasi sebelumnya.
Salman A
dengan asumsi $objectadalah objek DateTime, saya menggunakan if (new DateTime() > $object) {}dan berfungsi dengan tidak benar. Tapi if (time() > $bject->getTimeStamp()) {}bekerja dengan benar. @Salman A
pengguna4271704
77

Ada juga kelas DateTime yang mengimplementasikan fungsi untuk operator perbandingan.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}
VolkerK
sumber
1
Apa fungsi yang diimplementasikannya untuk ini?
still_dreaming_1
6

Periksa strtotime-fungsi PHP untuk mengubah tanggal / waktu yang Anda tetapkan menjadi stempel waktu: http://php.net/manual/en/function.strtotime.php

Jika strtotimetidak dapat menangani format tanggal / waktu Anda dengan benar ("4:00 PM" mungkin akan berfungsi tetapi tidak "pada 4PM"), Anda harus menggunakan fungsi string, misalnya substruntuk mengurai / memperbaiki format Anda dan mengambil stempel waktu Anda melalui fungsi lain, mis mktime.

Kemudian bandingkan stempel waktu yang dihasilkan dengan tanggal / waktu saat ini ( if ($calulated_timestamp > time()) { /* date in the future */ }) untuk melihat apakah tanggal / waktu yang ditetapkan di masa lalu atau masa depan.

Saya sarankan untuk membaca PHP-doc pada tanggal / waktu-fungsi dan kembali ke sini dengan beberapa kode sumber Anda setelah Anda buntu.

Select0r
sumber
lihat jawaban Ivar Koster
Steel Brain
1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}
Rakesh Kumar Pradhan
sumber
Tentunya ini tidak akan berhasil karena $myDateakan sama dengan string (0) "".
Nikola Petkanski