DateTime sınıfı ve Zaman Farkı

DateTime benim pek kullanmadığım ancak ihtiyaç olabildiğinde kullanılabilecek sınıflardan birisidir. Kullanmama sebebim ise, zaman veya tarih kullanmam gerken yerlerde genellikle timestamp kullanmamdır. DateTime formatında çalışması bana hep zor gelmiştir. DateTime formatında tarih karşılaştırmak için, php nin kendi sınıfı üzerine ufak iki fonksiyon eklemesiyle, kendi sevdiğim hale getirdim.


PHP kodu
  1. /**
  2. * Zaman
  3. *
  4. * @package CnylmzCache
  5. * @author Gündüz Can YILMAZ
  6. * @copyright 2009
  7. * @version $Id$
  8. * @access public
  9. */
  10. class Zaman extends DateTime {
  11. protected $bolum;
  12. function aralik($str) {
  13. $degisim=array(
  14. 'dakika'=>'* 60',
  15. 'saat'=>'* 3600', // 60 dakika
  16. 'gun'=>'* 86400', // 24 saat
  17. 'hafta'=>'* 604800', // 7 gün
  18. 'ay'=>'*2592000', // 30 gün
  19. 'yil'=>'*31557600' // 365 gün + 6 saat
  20. );
  21. eval('$this->bolum=1'.strtr($str,$degisim).';');
  22. if($this->bolum < 1)
  23. return FALSE;
  24. else
  25. return TRUE;
  26. }
  27. function fark($zaman) {
  28. $time_bu=$this->getTimestamp();
  29. $time_baslangic=$zaman->getTimestamp();
  30. if($this->bolum < 1) $this->bolum=1;
  31. return ($time_bu-$time_baslangic)/$this->bolum;
  32. }
  33. }

Bu kodlarla, DateTime sınıfı üzerinde çalışan, Zaman adında bir sınıf türetiyoruz. Burada amaç, tarihler arasındaki farkı timestamp şeklinde alıp, istediğiniz zaman aralığı cinsinden size sunmaktır. Kullanışı ise şu şekilde,

PHP kodu
  1. $baslangic='2009-09-19';
  2. $zaman = new Zaman(date('Y-m-d'));
  3. $zaman->aralik('gun');
  4. $fark=$zaman->fark(new DateTime($baslangic));
  5. echo $fark;

Çıktı bugün itibariyle, 1 olacaktır çünkü $zaman->aralik fonksiyonu ile dönecek sonucun gün cinsinden olmasını sağladım. $zaman = new Zaman(date('Y-m-d')); satırı yerine $zaman = new Zaman('2009-09-20'); yazarak sonucu teyit edebilrisiniz.

DateTime sınıfı hakkında detaylı bilgiyi BURADAN bulabilirsiniz.

Okunma: 425 , Oy Sayısı: 10 , Puan: 8.80

Etiketler

datetime sinifi , php zaman farki , php date time , php datetime , datetime farki ,

murat Arıkan Aydin22 Aralık 2009 Salı 00:47:12


$bolum ü ne için kullandınız ?
||


Gündüz Can YILMAZ22 Aralık 2009 Salı 12:15:47



Zaman farkını saat olarak istediğinizde diziden *3600 değerini alıp 1 ile çarpıyo ve bunu $bolum değişkenine atıyo. Size zaman farkını vermeden önce de, çıkan timestamp farkını $bölüm değişkenine bölerek, geçen zamanın kaç saate karşılık geldiğini gösteriyo. gün yerine karşılığı olmayan bir string yolladığınızda, problem olmaması için eval('$this->bolum=1'.strtr($str,$degisim).';'); satırını kullandım. yani her ihtimalde bölüm en küçük 1 oluyor ve esasında da if($this->bolum < 1) kontrolüne gerek kalmıyor.
||




Yorumunuz