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)
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.
@ anushr, jika zona waktu diperlukan sebagai perbandingan, perbedaan waktu dapat ditambahkan ke tanggal sebelum membandingkan. Ini masih lebih cepat daripada mencoba mengonversi dua string waktu tanggal dalam mm/dd/yyyyformat 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-ddformat (atau yyyymmdd) sekitar tahun 1998 ketika saya menyadari itu jauh lebih cepat bahkan dalam SQL server.
AaA
59
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());}
Mengapa logika mundur aneh dan boolean asing? Mengapa tidak hanya "mengembalikan strtotime ($ time) == strtotime ('today')", "return strtotime ($ time)> time ()", dan "return strtotime ($ time) <time ()"?
Bobby Jack
@Obby Jack: Saya memiliki lebih banyak fungsi di fungsi-fungsi itu, lupa menghapus kode tambahan. Diperbaiki sekarang
Alix Axel
+1 pada fungsi helper, khususnya isPast b / c Saya baru saja menjalankan if(strtotime('2013-01-22 00:00:00.00') < time()){....}dan itu melakukannya untuk saya.
MDMoore313
47
Untuk menyelesaikan BoBby Jack, gunakan DateTime OBject, jika Anda memiliki php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Ini tidak benar. Jika $ var adalah hari ini (setelah tengah malam tepat), DateTime baru () akan lebih besar maka DateTime baru ($ var) dan itu tidak benar $ var sebelum hari ini.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
Dan Anda memerlukan PHP> = 5.4 untuk (DateTime baru ()) -> format ('Ym-d');
webrama.pl
6
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 futureif( 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 $inputakan 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.";}
Saya yakin OP mempertimbangkan hal ini dan itulah mengapa mereka memasukkan `
00:00
6
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 $varmemiliki bagian waktu pada 00:00:00 seperti OP yang ditentukan.
Ganti <=>dengan apa pun yang Anda butuhkan (atau simpan seperti ini di php 7)
//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 datesif($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!
Jawaban:
Mengubahnya menjadi nilai waktu
Memberi Anda detik sejak
$var
Akan memeriksa apakah
$var
telah dalam hari terakhir.sumber
Format itu sangat cocok untuk perbandingan string standar misalnya
Untuk mendapatkan tanggal hari ini dalam format itu, cukup gunakan:
date("Y-m-d H:i:s")
.Begitu:
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,
Klik di sini untuk merujuk ke Zona Waktu PHP yang tersedia.
sumber
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 menggunakanyyyy-mm-dd
format (atauyyyymmdd
) sekitar tahun 1998 ketika saya menyadari itu jauh lebih cepat bahkan dalam SQL server.Ini dia:
Juga, beberapa fungsi pembantu lainnya:
sumber
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+:
sumber
Anda bisa menggunakan
DateTime
kelas:Operator perbandingan berfungsi *:
Dimungkinkan juga untuk mengambil nilai cap waktu dari objek DateTime dan membandingkannya:
* Catatan yang
===
mengembalikan false ketika membandingkan dua objek DateTime yang berbeda bahkan ketika mereka mewakili tanggal yang sama.sumber
$future
telah menjadi masa lalu. : Psumber
$var
sama dengan saya di OPSatu 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,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:
Karena inputnya adalah string tanggal sederhana, penggunaan
strtotime()
pada$input
akan menganggap bahwa itu tengah malam 2016-11-09. Jadi, berlaritime()
kapan saja setelah tengah malam akan selalu menyenangkan$input
masa lalu, meskipun mereka pada hari yang sama.Untuk memperbaikinya, Anda cukup kode, seperti ini:
sumber
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:
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
sumber
(contoh w3schools, ini berfungsi dengan sempurna)
sumber
Memperluas jawaban Josua dari w3schools:
Saya harap ini membantu. Posting pertama saya di stackoverflow!
sumber
Bandingkan objek waktu tanggal:
(Saya memilih 10 hari - Apa pun yang lebih dari 10 hari adalah "TUA", atau "BARU")
sumber
Beberapa jawaban yang diberikan tidak mempertimbangkan hari ini!
Ini proposal saya.
sumber
Jika Anda melakukan hal-hal dengan waktu dan tanggal Karbon adalah teman baik Anda;
Instal paketnya kemudian:
lt = kurang dari, gt = lebih besar dari
Seperti dalam pertanyaan:
dan banyak lagi;
sumber