PHP nasıl 5.2.8 iki DateTime nesne karşılaştırılır?

4 Cevap php

Bu ileriye oldukça düz olması gereken bir şey gibi görünüyor, ama ben buraya, şimdi bir süre için page faulting Bu sorunu sıkışmış edilmiştir.

PHP belgelerine bir göz olması, DateTime nesne iki yöntem izleyen hem benim sorunu çözmek gibi görünüyor:

Bu yöntemlerin her ikisi (ben onları aramak için çalışırsanız ben onlar yok bulmak değil, şaşırtıcı, ve) sürüm> = 5.3 mevcut olarak doco işaretlenir. Ben 5.2.8 için herhangi bir özel belgelerine bulamıyorum bu yüzden benim sürümünde eşdeğer yöntemler varsa emin değilim. I Googled sorun var ve çok basit benim ihtiyaçlarına cevap bunların hiçbiri çözüm eklektik bir dizi bulundu:

  • Nasıl iki DateTime nesne karşılaştırılır?
  • Nerede önceki PHP sürümleri için doco bulabilirim? Özellikle sürüm 5.2.8?

Bazı bağlam için, ben aşağıdaki kodu var:

$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));

// is the end date more ancient than the start date?
if ($end_dt < $start_dt) 

Görünüşe göre bu adam hakkında hiçbir karşılaştırma operatörü var.

EDIT: Apparently Benim varsayımlar (yani bu etkili gösteren için teşekkürler Milen) tamamen yanlış idi. Orada bir karşılaştırma operatörü ve sadece para cezası sayesinde çalışıyor. Bazen gerçekten bir derleyici özledim. Bug Yukarıdaki kodda, ben sana :) yaptım daha çok daha hızlı bulacaksınız eminim.

Ben senin çözümün basitliği benim utanç için sabırsızlanıyoruz.

EDIT: Ve emin yeterli, utanç gelişir ...

4 Cevap

Aşağıdaki karşılaştırma operatörleri DateTime sınıfı için olduğunu onaylamak gibi görünüyor:

dev:~# php
<?php
date_default_timezone_set('Europe/London');

$d1 = new DateTime('2008-08-03 14:52:10');
$d2 = new DateTime('2008-01-03 11:11:10');
var_dump($d1 == $d2);
var_dump($d1 > $d2);
var_dump($d1 < $d2);
?>
bool(false)
bool(true)
bool(false)
dev:~# php -v
PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
dev:~#

Ayrıca dönem saniye karşılaştırabilirsiniz:

$d1->format('U') < $d2->format('U')

Source : http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (quite interesting article about DateTime)

Bu size yardımcı olabilir.

$today = date("m-d-Y H:i:s");
$expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00";
$thisMonth =date("m");
$thisYear = date("y");
//pr($today);
//pr($expectedDate);


        if (strtotime($expectedDate) > strtotime($today)) {
            echo "Expected date is greater then current date";
            return ;
        } else
            {
             echo "Expected date is lesser then current date";
            }

Eğer tarih ve zamanı değil karşılaştırmak istiyorsanız, bu kullanabilirsiniz:

$d1->format("Y-m-d") == $d2->format("Y-m-d")