Saya sudah mengikuti
$var = "2010-01-21 00:00:00.0"
Saya ingin membandingkan tanggal ini dengan tanggal hari ini (yaitu saya ingin tahu apakah ini $var
sebelum hari ini atau sama dengan hari ini atau tidak)
Fungsi apa yang harus saya gunakan?
Saya sudah mengikuti
$var = "2010-01-21 00:00:00.0"
Saya ingin membandingkan tanggal ini dengan tanggal hari ini (yaitu saya ingin tahu apakah ini $var
sebelum hari ini atau sama dengan hari ini atau tidak)
Fungsi apa yang harus saya gunakan?
Jawaban:
strtotime($var);
Mengubahnya menjadi nilai waktu
time() - strtotime($var);
Memberi Anda detik sejak $var
if((time()-(60*60*24)) < strtotime($var))
Akan memeriksa apakah $var
telah dalam hari terakhir.
Format itu sangat cocok untuk perbandingan string standar misalnya
if ($date1 > $date2){
//Action
}
Untuk mendapatkan tanggal hari ini dalam format itu, cukup gunakan: date("Y-m-d H:i:s")
.
Begitu:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
Itulah keindahan format itu: ia memesan dengan baik. Tentu saja, itu mungkin kurang efisien, tergantung pada keadaan Anda yang sebenarnya, tetapi mungkin juga jauh lebih nyaman dan mengarah pada kode yang lebih dapat dipertahankan - kita perlu tahu lebih banyak untuk benar-benar membuat keputusan penilaian itu dilakukan.
Untuk zona waktu yang benar, Anda dapat menggunakan, misalnya,
date_default_timezone_set('America/New_York');
Klik di sini untuk merujuk ke Zona Waktu PHP yang tersedia.
mm/dd/yyyy
format ke tanggal dan kemudian membandingkannya. Itu selalu mengkhawatirkan saya ketika pengembang memiliki tanggal di beberapa zona waktu di sistem mereka. Saya pikir lebih baik menyimpan tanggal di sistem Anda, selalu dalam zona waktu tunggal dan kemudian menampilkannya di zona waktu apa pun yang diperlukan. Saya mulai menggunakan yyyy-mm-dd
format (atau yyyymmdd
) sekitar tahun 1998 ketika saya menyadari itu jauh lebih cepat bahkan dalam SQL server.
Ini dia:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
Juga, beberapa fungsi pembantu lainnya:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
dan itu melakukannya untuk saya.
Untuk menyelesaikan BoBby Jack, gunakan DateTime OBject, jika Anda memiliki php 5.2.2+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Anda bisa menggunakan DateTime
kelas:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
Operator perbandingan berfungsi *:
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
Dimungkinkan juga untuk mengambil nilai cap waktu dari objek DateTime dan membandingkannya:
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* Catatan yang ===
mengembalikan false ketika membandingkan dua objek DateTime yang berbeda bahkan ketika mereka mewakili tanggal yang sama.
$future
telah menjadi masa lalu. : P
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
$var
sama dengan saya di OP
Satu peringatan berdasarkan pengalaman saya, jika tujuan Anda hanya melibatkan kencan maka berhati-hatilah untuk memasukkan cap waktu . Sebagai contoh, katakanlah hari ini "2016-11-09"
. Perbandingan yang melibatkan cap waktu akan membatalkan logika di sini. Contoh,
// input
$var = "2016-11-09 00:00:00.0";
// check if date is today or in the future
if ( time() <= strtotime($var) )
{
// This seems right, but if it's ONLY date you are after
// then the code might treat $var as past depending on
// the time.
}
Kode di atas tampaknya benar, tetapi jika HANYA tanggal yang ingin Anda bandingkan, maka kode di atas bukan logika yang benar. Mengapa? Karena, waktu () dan strtotime () akan memberikan termasuk stempel waktu. Artinya, meskipun kedua tanggal jatuh pada hari yang sama, tetapi perbedaan waktu akan menjadi masalah. Perhatikan contoh di bawah ini:
// plain date string
$input = "2016-11-09";
Karena inputnya adalah string tanggal sederhana, penggunaan strtotime()
pada $input
akan menganggap bahwa itu tengah malam 2016-11-09. Jadi, berlari time()
kapan saja setelah tengah malam akan selalu menyenangkan$input
masa lalu, meskipun mereka pada hari yang sama.
Untuk memperbaikinya, Anda cukup kode, seperti ini:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
Beberapa tahun kemudian, saya kedua pengamatan Bobby Jack bahwa 24 jam terakhir bukan hari ini !!! Dan saya terkejut bahwa jawabannya sangat terangkat ...
Untuk membandingkan jika suatu tanggal tertentu kurang, sama atau lebih besar dari yang lain, pertama-tama Anda harus mengubahnya "turun" ke awal hari. Dengan kata lain, pastikan Anda berbicara tentang waktu yang sama 00:00:00 di kedua tanggal. Ini bisa dilakukan dengan sederhana dan elegan sebagai:
strtotime("today") <=> strtotime($var)
jika $var
memiliki bagian waktu pada 00:00:00 seperti OP yang ditentukan.
Ganti <=>
dengan apa pun yang Anda butuhkan (atau simpan seperti ini di php 7)
Juga, jelas, kita berbicara tentang zona waktu yang sama untuk keduanya. Untuk daftar Zona Waktu yang didukung
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(contoh w3schools, ini berfungsi dengan sempurna)
Memperluas jawaban Josua dari w3schools:
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);
//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);
//now compare the two dates
if ($intDiff > 0) {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}
Saya harap ini membantu. Posting pertama saya di stackoverflow!
Bandingkan objek waktu tanggal:
(Saya memilih 10 hari - Apa pun yang lebih dari 10 hari adalah "TUA", atau "BARU")
$now = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
echo "OLD! " . $yourdate->format('m/d/Y');
}else{
echo "NEW! " . $yourdate->format('m/d/Y');
}
Beberapa jawaban yang diberikan tidak mempertimbangkan hari ini!
Ini proposal saya.
$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);
if ($given_date == new \DateTime('today')) {
//today
}
if ($given_date < new \DateTime('today')) {
//past
}
if ($given_date > new \DateTime('today')) {
//future
}
Jika Anda melakukan hal-hal dengan waktu dan tanggal Karbon adalah teman baik Anda;
Instal paketnya kemudian:
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt = kurang dari, gt = lebih besar dari
Seperti dalam pertanyaan:
$theDay->gt(Carbon::today()) ? true : false;
dan banyak lagi;