Yanıtlar:
strtotime($var);
Zaman değerine dönüştürür
time() - strtotime($var);
O zamandan beri saniyeler verir $var
if((time()-(60*60*24)) < strtotime($var))
$var
Son gün içinde olup olmadığını kontrol eder .
Bu biçim, standart bir dize karşılaştırması için mükemmel şekilde uygundur.
if ($date1 > $date2){
//Action
}
Bu biçimde bugünün tarihi almak için sadece kullanın: date("Y-m-d H:i:s")
.
Yani:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
Bu formatın güzelliği bu: güzel bir şekilde sipariş ediyor. Tabii ki olabilir tam koşullara bağlı olarak çok verimli olmayabilir, ama aynı zamanda bir sürü daha uygun ve daha sürdürülebilir koda sebep olabilir - daha gerçekten bilmek o yargı çağrı yapmak gerekiyordu.
Doğru saat dilimi için, örneğin,
date_default_timezone_set('America/New_York');
Kullanılabilir PHP Zaman Dilimlerine başvurmak için burayı tıklayın .
mm/dd/yyyy
biçim olarak tarihe dönüştürmeye ve sonra karşılaştırmaya çalışmaktan daha hızlıdır . Geliştiricilerin sistemlerinde birden fazla saat diliminde tarihleri olduğunda her zaman endişeleniyorum. Tarihleri sisteminizde saklamak, her zaman tek bir saat diliminde saklamak ve daha sonra gereken saat diliminde görüntülemek daha iyidir. SQL sunucusunda bile çok daha hızlı olduğunu fark ettiğimde 1998 yyyy-mm-dd
(veya yyyymmdd
) biçimini kullanmaya başladım .
Hadi bakalım:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
Ayrıca, bazı daha yardımcı işlevler:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
ve bu benim için yaptı.
Php 5.2.2+ sürümüne sahipseniz, BoBby Jack'i kullanmak için DateTime OBject kullanımı:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
DateTime
Sınıfı kullanabilirsiniz :
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
Karşılaştırma operatörleri çalışır *:
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)
DateTime nesnelerinden zaman damgası değerlerini almak ve bunları karşılaştırmak da mümkündür:
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)
* ===
İki farklı DateTime nesnesini aynı tarihi temsil etseler bile karşılaştırırken false döndürdüğünü unutmayın .
$future
geçmiş haline geldi. : 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
OP de eşit değil
Deneyimlerime dayalı bir dikkat, eğer amacınız sadece tarih içeriyorsa, zaman damgasını eklemeye dikkat edin . Örneğin, bugün diyelim "2016-11-09"
. Zaman damgasını içeren karşılaştırma burada mantığı geçersiz kılacaktır. Misal,
// 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.
}
Yukarıdaki kod doğru görünüyor, ancak SADECE karşılaştırmak istediğiniz tarihse, yukarıdaki kod doğru mantık değildir. Neden? Çünkü time () ve strtotime (), zaman damgasını içerecektir. Yani, her iki tarih de aynı güne düşse de, zaman farkı önemli olacaktır. Aşağıdaki örneği düşünün:
// plain date string
$input = "2016-11-09";
Girişi düz tarih dizesi olduğundan, kullanırken strtotime()
üzerinde $input
o 2016-11-09 gece yarısı olduğunu varsayar. Yani, time()
gece yarısından sonra herhangi bir zamanda koşmak $input
, aynı gün olsalar bile , her zaman geçmiş gibi davranacaktır .
Bunu düzeltmek için basitçe şöyle kodlayabilirsiniz:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
Birkaç yıl sonra, Bobby Jack'in son 24 saatin bugün olmadığı gözlemini ikinci kez aldım !!! Ve cevabın o kadar çok iptal edildiğine şaşırdım ...
Belirli bir tarihin diğerinden daha az, eşit veya daha büyük olup olmadığını karşılaştırmak için, önce günün başlangıcına "aşağı" döndürmeniz gerekir. Başka bir deyişle, her iki tarihte de aynı 00:00:00 saatinde konuştuğunuzdan emin olun. Bu basit ve zarif bir şekilde yapılabilir:
strtotime("today") <=> strtotime($var)
Eğer $var
zaman parçası 00:00:00 OP belirtilen gibi .
<=>
İhtiyacınız olanla değiştirin (veya php 7'de böyle tutun)
Ayrıca, her ikisi için de aynı saat dilimi hakkında konuşuyoruz. İçin Dilimlerinin Listesi
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(w3schools örneği, mükemmel çalışıyor)
Josua'nın w3schools'un cevabına genişleyen:
//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';}
Umarım bu yardımcı olur. Stackoverflow'daki ilk yazım!
Tarih ve saat nesnelerini karşılaştırın:
(10 gün seçtim - 10 günden daha eski herhangi bir şey "ESKİ", başka bir şekilde "YENİ")
$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');
}
Verilen cevapların bazıları günümüzde dikkate alınmamıştır!
İşte teklifim.
$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
}
Eğer zaman ve tarih ile bir şeyler yaparsanız Karbon en iyi arkadaşınızdır;
Paketi kurun ve ardından:
$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 = küçüktür, gt = büyüktür
Sorudaki gibi:
$theDay->gt(Carbon::today()) ? true : false;
ve daha fazlası;