Geçerli tarihin / saatin belirlenmiş bir tarih / saati geçip geçmediğini nasıl kontrol edebilirim?


115

Şu anki tarihin / saatin şu tarihi geçip geçmediğini kontrol edecek bir komut dosyası yazmaya çalışıyorum 05/15/2010 at 4PM

Bu denetimi gerçekleştirmek için PHP'nin date () işlevini nasıl kullanabilirim?

Yanıtlar:


228

PHP> = 5.2.2 olduğundan, DateTimesınıfı şu şekilde kullanabilirsiniz :

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
}

DateTime yapıcısına iletilen dize bu kurallara göre ayrıştırılır .


Kullanmanın timeve strtotimeişlevlerin de mümkün olduğunu unutmayın . Orijinal cevaba bakın .


6
zaman damgasının bazı sınırlamaları vardır, ve bazı hatalar da, örneğin bir zaman damgası 1970 öncesi ve 2038'den sonraki bir tarihi işleyemez (bkz. Ivar Koster'in cevabı)
Steel Brain

1
Sıklıkla yeni DateTime () 'ın parametresiz kötüye kullanıldığını görüyoruz, eğer UTC tarihlerini kullanıyorsanız (gerektiği gibi), yeni DateTime ("şimdi", yeni DateTimeZone (' UTC ')) kullanmayı tercih ediyoruz. Bu, uygulamanızı tarihlerde yanlış anlaşılabilir hatalardan koruyacaktır. bunu bir statik değişken, statik bir sınıfta veya çalışan sürecinizde başka bir yerde saklamanızı tavsiye ederim ...
Loenix

Ya zaten bir DateTime nesnemiz varsa ve önerdiğiniz gibi DateTime yapıcısına bir nesne geçiremediğimiz için bunun geçmiş olup olmadığını bilmek istiyorsak? getTimestamp () 'ı kullanıp time () ile karşılaştırmalı mıyız? @Salman A
user4271704

@ user4271704 Bu new DateTime('2010-05-15')sadece bir örnektir, daha önce başlattığınız herhangi bir DateTime nesnesi olabilir.
Salman A

$objectbir DateTime nesnesi olduğunu varsayarsak , kullandım if (new DateTime() > $object) {}ve yanlış çalışıyor. Ama if (time() > $bject->getTimeStamp()) {}düzgün çalışıyor. @Salman A
user4271704

77

Karşılaştırma işleçleri için bir işlev uygulayan DateTime sınıfı da vardır .

// $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';
}

1
Bunun için hangi işlevi yerine getiriyor?
still_dreaming_1

6

strtotimeAyarladığınız tarihi / saati bir zaman damgasına dönüştürmek için PHP'nin işlevini kontrol edin : http://php.net/manual/en/function.strtotime.php

Eğer strtotimedoğru ( "4 de" "04:00" muhtemelen çalıştığını ancak) Tarih / saat biçimini işleyemez, sen örneğin kullanım dize fonksiyonları gerekir substr/ ayrıştırmak için Formatınızı düzeltip aracılığıyla zaman damgası almak başka bir işlev, örneğin mktime.

Ardından if ($calulated_timestamp > time()) { /* date in the future */ }, ayarlanan tarih / saatin geçmişte mi yoksa gelecekte mi olduğunu görmek için ortaya çıkan zaman damgasını geçerli tarih / saatle ( ) karşılaştırın.

Tarih / saat işlevleriyle ilgili PHP belgesini okumanızı ve takılıp kaldığınızda kaynak kodunuzun bir kısmıyla buraya geri dönmenizi öneririm.


Ivar Koster'in cevabını görün
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;
}

Elbette bu $myDateeşit olacağı şekilde çalışmayacaktır string (0) "".
Nikola Petkanski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.