2014-12-02 16 views
11

'un altında olup olmadığını öğrenmek için Carbon'ı kullanıyorum Laravel kullanıyorum. Ben zaten satıcılar klasöründe bulunan Carbon ile karşılaştım. Hızlı arama yaptım ve PHP tarih saatinden büyük bir uzantı olduğunu öğrendim., bir zamanın

Uygulamamın bir yerinde, belirli bir zamanın iki zaman arasında düşüp düşmediğini kontrol edecek bir mantığa ihtiyacım vardı. Diyelim ki, saat 10:00 da 9:55 ve 10:05 zamanlarında düşüp düşmediğini kontrol etmek istiyorum. Elbette düşüyor ama bu mantığı Karbon yardımıyla nasıl kullanmalıyım?

Carbon::now() varsayılan olarak 2014-12-02 14:37:18 biçiminde tarih ve saati döndürecektir. Eğer zaman parçasını sadece 14:37:18'dan çıkarabiliyorsam, test altındaki sürenin iki zaman diliminde olup olmadığını bilmek için iki kez karşılaştırabilir miyim diye düşünüyordum.

Doğrudan iki Karbon nesnesini kontrol edersem, yıl da kontrol etmeye çalışır. Ama tek ihtiyacım olan sadece zaman bölümüydü. Ve aslında, zamanların (h: m: s) doğrudan karbon ile karşılaştırılabiliyorsa bile emin bile olamıyorum.

+0

örnekleri bulundu [burada] (https://github.com/briannesbitt/Carbon) Ben Karbon aracılığıyla çok daha kolay bir yolu var olacağını düşündüm –

cevap

1

UNIX zamanı bu tür bir görev için daha kolay.

Böylece hipster gösterimini boyunbağı temsiline dönüştürmek ve gerçek bir erkekle karşılaştırmak için strtotime'ı kullanabilirsiniz. Sadece saatleri karşılaştırmak istediğinizden, bunu göreli bir zaman kullanarak kesebilirsiniz.

<?php 
$now = time(); 
$startTime = strtotime("12:10:24", $now); 
$endTime = strtotime("14:24:45", $now); 
$point = strtotime("12:25:40", $now); 
if($point >= $startTime && $point <= $endTime) 
{ 
    echo "Inside\n"; 
} else { 
    echo "Outside\n"; 
} 
?> 

Çıktı:

$ php test.php 2> /dev/null 
Inside 
+0

. Karbon gibi bir şey umuyordum:: (nokta) -> arasında (başlangıç, bitiş). Evet, sadece o kadar. Hala böyle bir yolu varsa bekliyorum. Ama şu anda yaptığınız şeyi yaptım, 'gerçek bir erkek gibi' –

+0

Haha, kibirli yazıdan dolayı üzgünüm, bu şekilde kastetmiyorum :) Karbon hakkında bilmiyorum ve böyle bir Özellik, aksi takdirde, buna eklemek için belirgin bir özellik olacaktır. :) – DusteD

15

Evet sadece dokümantasyon here üzerinde bir göz atın olarak, karbon bunu yapmanın bir yolu yoktur.

Geçerli örneğin iki örnek arasında olup olmadığını belirlemek için, uygun olarak adlandırılmış() yöntemini kullanabilirsiniz. Üçüncü parametre, karşılaştırmaya eşit olup olmadığını gösterir. Sınırları arasında veya eşit olup olmadığını belirleyen varsayılan değerdir. biçimlendirme ve karşılaştırma

$first = Carbon::create(2012, 9, 5, 1); 
$second = Carbon::create(2012, 9, 5, 5); 
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second));   // bool(true) 
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second));   // bool(true) 
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false) 
+0

'arasında()' ikinci 'var_dump için çalışmıyor (Carbon :: create (2012, 9, 5, 5) -> ($ ilk, $ saniye) arasında); // bool (true) 'false döndürdüğü için. Saat dilimi ile ilgisi var mı ?? – Pathros

+0

Ben bir Karbon uzmanı değilim, test edecek ve geri dönecek. – Kyslik

+3

Teşekkürler. Nedenini buldum: 'now()' işlevi için bugün() 'yi değiştirdim. Birincisi, tarihi gece yarısı (2016 2016-05-13 00: 00: 00') olarak döndürürken, ikincisi bilgiyi görüntülediğiniz anda tarihi döndürür ('2016-05-13 08: 48: 36'). Referans [burada] (http://carbon.nesbot.com/docs/#api-comparison). – Pathros

İlgili konular